对于一些语法糖我想引用返回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