2016-05-29 391 views
1

如何獲取Vector3f或Eigen庫中的其他類型的文本表示。我看到很多使用返回WithFormat類的.format()的例子。這可以用於cout。然而,我正在尋找方式來獲取Vector3f作爲標準:字符串在人類可讀的形式。精確的格式化並不太重要,因此如果Eigen有任何默認格式,那麼也可以。如何將Eigen庫的矩陣或矢量類型轉換爲字符串?

注意:我當然可以使用stringstream來取代cout,但是我跳躍有更直接的方法來做到這一點。

回答

2

據我所知,stringstream方法是要走的路。事實上,在IO.h文件(Eigen::internal::print_matrix)中,開發人員使用字符串流來獲取每個條目的寬度。

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()); 
}