如何将 Eigen 库的 Matrix 或 Vector 类型转换为字符串?

How to convert Eigen library's Matrix or Vector types to string?

如何获取 Vector3f 或 Eigen 库中其他类型的文本表示。我看到很多使用 .format() 的示例,其中 returns WithFormat class。然后可以与 cout 一起使用。但是,我正在寻找以某种人类可读的形式将 Vector3f 获取为 std:string 的方法。准确的格式不太重要,所以如果 Eigen 有任何默认格式,那么它也可以。

注意:我当然可以使用 stringstream 来代替 cout,但我希望有更直接的方法来做到这一点。

据我所知,stringstream 方法是可行的方法。事实上,在IO.h文件(Eigen::internal::print_matrix)中,开发人员使用stringstreams来获取每个条目的宽度。

我最终采用的方法如下:

static std::string toString(const Vector3d& vect)
{
    return stringf("[%f, %f, %f]", vect[0], vect[1], vect[2]);
}

static string stringf(const char* format, ...)
{
    va_list args;
    va_start(args, format);

    int size = _vscprintf(format, args) + 1;
    std::unique_ptr<char[]> buf(new char[size] ); 

    #ifndef _MSC_VER
        vsnprintf(buf.get(), size, format, args);
    #else
        vsnprintf_s(buf.get(), size, _TRUNCATE, format, args);
    #endif

    va_end(args);            

    return string(buf.get());
}

我发现的最简单的解决方案(不确定是否最佳)是:

static std::string toString(const Eigen::MatrixXd& mat){
    std::stringstream ss;
    ss << mat;
    return ss.str();
}