2010-12-02 6 views
1

std::ostreamに書き込むために、operator<<を実装する1トンのユーザー定義型がある場合。 Pantheiosで自分のタイプをログに記録するときに、どのようにこれらを使用できますか?Pantheiosでロギングするときに既存の演算子<<オーバーロードを使用する方法は?

+0

同じ名前空間にあることを確認してください。これにより、ADLがキックインできるようになります。 –

+0

@Daniel:std :: ostreamなどを処理できるバックエンドは表示されません...? – Danvil

答えて

1

よく、あなたはoperator<<を再利用できる方法がありますが、それほど美味しくありません。私は個人的にboost :: lexical_castライブラリを使用して、ほぼすべてのデータ型をPantheiosがネイティブにサポートするstd :: stringデータ型に変換します。あなたがpointクラスに定義operator<<を持っているのであれば、あなたは、単に入力できます。もちろん、これでいくつかの注意点があります

pantheios::log_ERROR("Point: ", boost::lexical_cast<string>(point_object))

。多くの人がboost :: lexical_castが遅いと不平を言う。あなたはそれをGoogleにして、同じことを話す記事を見つけることができます(http://stackoverflow.com/questions/1250795/very-poor-boostlexical-cast-performance、http://accu.org/index.php/journals/1375)。 Pantheiosが優れたパフォーマンスを誇っていることを考えると、その利点の一部を失う可能性があります。また、boost :: lexical_castを追加すると、プロジェクトに数百のヘッダファイルを追加することができます。また、コンバージョンごとに多くの文字(boost :: lexical_castなど)を入力する必要があります(マクロでこれを最小限に抑えることができます - #define BLCS boost::lexical_cast<string>)。

2

独自のデータ型には「シム」を指定する必要があります。これを行う方法に関するドキュメントは次のとおりです:http://www.pantheios.org/tutorials_code.html#types_without_shims。例:この場合

namespace stlsoft 
{ 
    inline stlsoft::shim_string<char> c_str_data_a(Point const& point) 
    { 
    stlsoft::shim_string<char> s(101); 

    int cch = ::sprintf(s, "{%d, %d; area=%d}", 
         point.x, point.y, point.x * point.y); 

    s.truncate(static_cast<size_t>(cch)); 

    return s; 
    } 
    inline size_t c_str_len_a(Point const& point) 
    { 
    char buff[101]; 

    return static_cast<size_t>(::sprintf(&buff[0], "{%d, %d; area=%d}", 
           point.x, point.y, point.x * point.y)); 
    } 

} // namespace stlsoft 

、タイプは、ログステートメントに直接渡すことができます。

pantheios::log_ERROR("Point: ", point); 

幸運!

+0

お返事ありがとうございます!しかし、これが唯一のオプションであれば、私はoperator <<を直接使用できる別のフレームワークを使用します。これらのすべての機能を再実装する時間はありません。 – Danvil

+0

おそらく、あなたのタイプを受け入れる上記のテンプレート関数を定義することができます。これらの関数は 'operator <<'と 'std :: ostringstream'を利用できます。それらをあなたの型名前空間の中に入れてください。 –

+1

Pantheiosサイトで機能リクエストをしてみませんか? Pantheiosの主な作者は、STLSoftをしている人、そしてShimsのアイデアを思いついた人です。誰かがすぐにそれをやることができれば、彼は一人だ。彼は要求にかなり反応すると思う。 – dcw

関連する問題