如何在特征库中获取Vector3f或其他类型的文本表示。我看到许多使用.format()的示例返回WithFormat类。然后这可以与cout一起使用。但是,我正在寻找以某种人类可读的形式将Vector3f作为std:string的方法。确切的格式化并不重要,所以如果Eigen有任何默认格式,那么它也可以。
注意:我当然可以使用stringstream来替换cout,但是我可以通过更直接的方式来实现这一点。
答案 0 :(得分:4)
我发现最简单的解决方案,不确定是否最佳:
static std::string toString(const Eigen::MatrixXd& mat){
std::stringstream ss;
ss << mat;
return ss.str();
}
答案 1 :(得分:2)
据我所知,stringstream方法是可行的方法。实际上,在IO.h文件(Eigen::internal::print_matrix
)中,开发人员使用字符串流来获取每个条目的宽度。
答案 2 :(得分: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());
}