2

私はこれをしたい:

MyClass mc = MyClass("Some string" << anotherString);

回答ありがとうございます。少し面倒になったので、あなたが私に言ったことに基づいてこの質問を書き直すことにしました。最終的に、C++ 形式のマクロ / インライン ostringstreamを読み、コンストラクターを使用してこれを行うことは実際には不可能であるため、マクロを使用することにしました。一部の回答は、もはや関連性がありません。

今、私が実際にできることは次のとおりです。

MY_CLASS("Some string" << anotherString << " more string!");

このマクロの使用:

#include <sstream>

#define MY_CLASS(stream) \
MyClass( ( dynamic_cast<std::ostringstream &> ( \
    std::ostringstream() . seekp( 0, std::ios_base::cur ) << stream ) \
) . str() )

MyClass コンストラクターが文字列を取る場所:

MyClass::MyClass(string s) { /* ... */ }
4

4 に答える 4

4

ソリューションを再設計します。c-tor に文字列が必要な場合は、文字列を受け入れる必要があります。
また、これと同様のケースでは、コンストラクターが const 参照を受け入れる場合に適しています。

no matching function for call to ‘MyClass(std::basic_ostream <..>&)

operator<< が std::stringstream オブジェクトではなく std::basic_ostream に対して定義されているため、エラーが発生しました。もちろん使用できます

dynamic_cast< const std::stringstream& >( s << "hello" << "world" )

しかし、あなたのチーム リーダーは、このコードのためにあなたを解雇する可能性があります :)

ところで:

MyClass mc = MyClass("Some string" << anotherString);

のように書き直すことができます

MyClass mc("Some string" << anotherString);
于 2009-03-19T23:23:54.463 に答える
2

コンパイルエラーが含まれているようです

<iosfwd> 

クラスのヘッダーファイルに含まれていますが、含まれていません

<sstream> 

cxxファイルに.

于 2009-03-19T22:38:46.227 に答える