2011-10-31 5 views
1

私は触れられない機能を持っています。 "ログメーカー"です。ファイルを印刷するときに何かを印刷します。問題は、関数がconst stringしか得られないので、何かを印刷したい場合、このデータ型のすべてを変換する必要があります(私はcoutを使用できません)。C++での変換の問題(文字列が予期される)

itoa & atoi関数は標準関数ではないので、どちらも使用できません。 C++はデータ型にとって非常に「特別な」ものであり、変換は本当に簡単に受け入れられないので、これは私の質問です。 ログの目的のために、あらゆるタイプのデータを文字列に変換するにはどうすればよいですか?

おそらく、データ型を関数に変換してstringstream(もちろん私は文字列に変換する必要があります)に戻す関数をチェックする必要があります。

これはどのように行うべきかアドバイスはありますか?

答えて

5

boost::lexical_castostringstreamの使用をカプセル化していますので、 を使用することができます。それ以外の場合は、コードそれは難しいことではありません。

template<typename T> 
std::string 
toString(T const& object) 
{ 
    std::ostringstream results; 
    results << object; 
    return results.str(); 
} 

(ここstringstreamを使用する理由はありません。ostringstreamはほとんど十分です

+0

それはさらに簡単です。 – Urien

0

はい、文字列表現で任意のタイプを使用する場合は、stringstreamは中間の音を解決するようにします。

+0

私は愚かであると感じています。私はこれを '.str();'で文字列に変換するのを忘れていました – Urien

1

あなたは

  • STDを使用することができます::にstringstream

または

  • >
  • <
0

のlexical_castブースト私は関数はconstのはstd ::文字列&を期待仮定?

あなたのstd :: stringstreamによるアプローチは正しいです。代わりに、直接出力したいクラスのtoString()メソッドを書くこともできます。しかし、通常、オブジェクトをファイルに出力したい場合は、その特定のタイプの演算子に< <をオーバーロードします。