C++: Pure virtual type
我正在探索C++中的模板ShanaIGANS(C++ 11),我想拥有一个抽象类中的纯虚拟类型。这类似于scala的抽象类型。在C++中,我想做如下的事情:
1 2 3 4 5 6 7 8 9 10 | struct Base { // Says any concrete subclass must define Type, but doesn't // require that it be anything in particular. virtual typedef MyType; }; struct Derived : Base { // Won't compile unless this typedef exists. typedef int MyType; }; |
知道怎么做吗?
我不确定C++中是否真的需要这样做。
试图把自己放在一个寻求这样一个解决方案的设计师的位置上,我会说需要这种约束来强制某些类型遵守某些语法约定。
最有可能的是,这是需要的,因为通用算法需要句法约定:它不能与没有定义此类类型关联的类型一起工作。
例如,下面的算法要求其参数类型具有关联的
1 2 3 4 5 6 7 | template<typename T> bool foo(T t) { typedef typename T::bar_type FT; FT ft; ... } |
但是如果是这样的话,就不需要强制执行
当然,只有当你真的这么做时,你才会发现这一点,而不是以前。并且能够定义一个概念,比如EDCOX1,5,然后执行一些类型来实现这个概念是好的;另一方面,概念还不是C++的一部分,并且,正如他们所希望的那样,没有它们是可能的。
编辑
这不起作用,但我认为奇怪的重复模板模式可能是可行的方法。
编辑
1 2 3 4 | template<typename Dependent> class Base : public Dependent { typedef typename Dependent::MyType MyType; }; |
然后使用奇怪的循环模板模式:
1 2 3 4 | struct Derived : Base<Derived> { // Won't compile unless this typedef exists. typedef int MyType; }; |