2016-05-29 5 views
1

EigenライブラリでVector3fまたは他のタイプのテキスト表現を取得する方法。 WithFormatクラスを返す.format()を使用する多くの例があります。これはcoutと一緒に使うことができます。しかし私はいくつかの人間が読める形式でstd:stringとしてVector3fを取得する方法を探しています。正確な書式設定はそれほど重要ではないので、Eigenにデフォルトの書式設定がある場合は同様に動作します。固有ライブラリの行列型またはベクトル型を文字列に変換するには?

注:私は確かにcoutを置き換えるためにstringstreamを使用することができますが、これを行うより直接的な方法があります。

答えて

2

私が知る限り、ストリングストリームメソッドは方法です。実際、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()); 
} 
関連する問題