如何将本征库的矩阵或向量类型转换为字符串?

Shi*_*hah 5 eigen eigen3

如何在Eigen库中获取Vector3f或其他类型的文本表示形式。我看到了许多使用.format()并返回WithFormat类的示例。然后可以与cout一起使用。但是,我正在寻找以某些人类可读形式将Vector3f作为std:string获取的方法。确切的格式不太重要,因此,如果Eigen具有任何默认格式,那么效果也很好。

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

小智 7

我发现,最不确定的最佳解决方案是:

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


Shi*_*hah 0

我最终采取的方法如下:

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());
}
Run Code Online (Sandbox Code Playgroud)

  • 考虑到内置的流操作符,这似乎不是正确的方法。即使没有内置的流运算符,这也不是一个好方法(“new”char 数组?真的吗?)。 (2认同)