以下にコメントしてくれてありがとう。ポインタのリストへのメンバー関数
Class1 { debug(std::ostream&){} };
int main() {
std::vector<Class1*> list1;
// some work to do
}
ターゲットプラットフォーム:
- プラットフォーム(1):ウィン7x64、VS2010
- プラットフォーム(2)のLinux X32、G ++ 4.4
Q:次のステートメントに "std :: cout"を渡す正しい方法は何でしょうか?
std::for_each(list1.begin(),
list1.end(),
"afunction(&Class1::debug, std::cout)");
私は以前にデバッグ()関数内「のstd :: coutを」を使用しますが、後でデバッグメッセージを出力するための柔軟性を与えることを検討してください。
編集:その他の情報:ファンクタオブジェクトがある場合は、複数のクラスに対応するためにファンクタを実装する必要があります(これらのクラスは同じ「デバッグ」関数の署名以外の関係はありません)。
Edit(2): "std :: for_each"を使用すると、各クラスの対応するデストラクタを直接呼び出してlist1のすべてのオブジェクトを破棄することは可能ですか? (例えばfor_each(l.begin()、l.end()、 "クラス::〜のClass1");
編集(3): "PMR" あたりが示唆したように、私は
std::for_each(l.begin(),
l.end(),
std::bind2nd(std::mem_fn(&Class1::debug), out));
として声明を作ります
これは、コンパイルし、Linuxプラットフォーム上で正しく実行されますが、VS2010、Class1のためのコードで失敗しました::デバッグは
void Class1::debug(const std::ostream& out)
{
out << "some text" << someVar << "some text" << std::endl;
}
VSエラーMSGが
エラーC2678です:バイナリ '< <':オペレーターなし'const std :: ostream'型の左辺オペランドを取るatorが見つかりました(または受け入れ可能な変換はありません)
キューはありますか?
[閉] 私のクラスにオーバーロードされた演算子< <が実装され、デバッグプリント機能の使用が閉じられました。すべてのヒントを与えてくれてありがとう。
私はMS VS2010でエラー "C2678:binary '<<'が見つかりませんでした:いくつかのポイントにコンパイルしましたが、 'const std :: ostream '(あるいは受け入れ可能な変換はありません) –
私のコード例では、operator <<を見ることができません。おそらくあなたは出力を行う方法に問題があります。 'ostream'を' const& 'ではなく'& 'で取ってください。これで解決するはずです。 – pmr