curiously recurring template pattern and virtual inheritance
我使用奇怪的重复模板模式来建模静态多态性。
在引入
然后编译器(Visual Studio 2013)开始抱怨
基本上,不允许这种转换。
为什么会这样?
有没有一个解决办法不包括放弃一个或另一个?
编辑:
这里有一个示例(移除虚拟的,它就可以工作了):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | template <class Derived> struct Base { void interface() { static_cast<Derived*>(this)->implementation(); } }; struct Derived : virtual Base<Derived> { void implementation() { std::cout <<"hello"; } }; int main() { Derived d; d.interface(); } |
从我的发现来看,这些是不能组合的。
正如T.C.在评论中指出的,
这意味着两个不混合,一个必须给予。