如何獲取Vector3f或Eigen庫中的其他類型的文本表示。我看到很多使用返回WithFormat類的.format()的例子。這可以用於cout。然而,我正在尋找方式來獲取Vector3f作爲標準:字符串在人類可讀的形式。精確的格式化並不太重要,因此如果Eigen有任何默認格式,那麼也可以。如何將Eigen庫的矩陣或矢量類型轉換爲字符串?
注意:我當然可以使用stringstream來取代cout,但是我跳躍有更直接的方法來做到這一點。
如何獲取Vector3f或Eigen庫中的其他類型的文本表示。我看到很多使用返回WithFormat類的.format()的例子。這可以用於cout。然而,我正在尋找方式來獲取Vector3f作爲標準:字符串在人類可讀的形式。精確的格式化並不太重要,因此如果Eigen有任何默認格式,那麼也可以。如何將Eigen庫的矩陣或矢量類型轉換爲字符串?
注意:我當然可以使用stringstream來取代cout,但是我跳躍有更直接的方法來做到這一點。
據我所知,stringstream方法是要走的路。事實上,在IO.h文件(Eigen::internal::print_matrix
)中,開發人員使用字符串流來獲取每個條目的寬度。
我終於採取的方法如下:
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());
}