オペレータをオーバーロードしようとしています< <が機能しています。私はこれを理解しようとしているいくつかの固い時間のために立ち往生しています。私はostreamでこれを行う方法の多くの例を見つけましたが、いずれも私の特定の問題を対象としていませんでした。<<クラス関数をオーバーロードしようとしています
#include <iostream>
class foo
{
public:
foo& operator<< (foo& (*pf)(foo&))
{
return pf(*this);
}
foo& do_something_more(foo& os)
{
return os;
}
};
ostream& do_something(ostream& os)
{
os << "1." << "\n" << "2.";
return os;
}
int main()
{
foo a;
std::cout << do_something; // this works
a << do_something_more; // this do not
system("pause");
return 0;
}
これは私がこの問題を解決しようとした方法を一例にすぎません。 「do_something_more」というエラーが表示されます。宣言された識別子がこれに含まれています。
ありがとうございました!
'do_something_more()'は 'foo'のメンバー関数であり、それを呼び出すにはインスタンスが必要です。 –
それを静的にして 'a << foo :: do_something_more;' ...または単に非メンバを使用してください。 – LogicStuff
そのようなものは本当に意味がありません。 –