2
我有一個是從ostream的派生類:創建ostream的操縱特定類
class my_ostream: public std::ostream
{
// ...
}
我想打一個操縱(例如do_something
),該工程具體到這個類,像這樣:
my_ostream s;
s << "some text" << do_something << "some more text";
我做了以下內容:
std::ostream &do_something(std::ostream &os)
{
my_ostream *s = dynamic_cast<my_ostream*>(&os);
if (s != NULL)
{
// do something
}
return os;
}
這工作,但比較難看。我試過以下內容:
my_ostream &do_something(my_ostream &s)
{
// do something
return s;
}
這不起作用。我也嘗試了另一種方法:
class my_ostream: public std::ostream
{
// ...
my_ostream &operator<<(const do_something & x)
{
// do something
return *this;
}
}
這仍然不起作用。
我試了一下,這是行不通的。它編譯,但不調用操縱函數。我覺得這很奇怪,因爲它正是在'std :: ostream'中完成的。 – petersohn 2010-04-22 11:48:31
@petersohn:它必須是你的編譯器的問題,因爲上面的代碼適用於我,因爲它(g ++ 3.4.4) – catwalk 2010-04-22 12:11:09
我只是想補充一點,我一直在尋找這個答案的整個一天,這只是按預期工作(g ++ 4.7.0)。 – cubuspl42 2012-08-13 22:22:24