對於一些語法糖我想引用返回this
,但繼承時,函數應該返回子類的類型:返回參考這個和繼承
class base {
T &operator!() { return *this; }
};
base b; b = !b;
class child : public base {};
child c; c = !c;
由於運營商的,我不能只是返回指針和dynamic_cast它,它必須是一個參考。
這可能嗎?使用decltype(*this)
爲T不工作,也不做auto f()->decltype(*this)
,因爲this
(雖然我不明白爲什麼,在自動情況下)
在Scala中,你可以寫類似:
template<typename T> class base {
T &f() { return *this; }
};
class child : public base<child> {};
但我的g ++不會接受這個(不知道這是bug還是隻是不在規範中?)
當然有明確的方法,但我不知道是否可以使用C++ 11功能避免這種情況?
class child : public base {
child &operator!() { base::operator!(); return *this }
};
請不要以改變其基本含義的方式重寫操作符。這是一個非常糟糕的主意,會導致混亂和錯誤。 – 2012-02-13 18:38:51
在這種情況下,它是一個DSL的東西,我實際上使用&&,即使它不返回一個布爾,它的語義意思是「和」 – pascal 2012-02-13 20:53:48