emc*_*sen 4 c++ templates scala generic-programming
我在C++(C++ 11)中探索模板恶作剧,我想要的一件事是抽象类中的纯虚拟类型.这就像Scala的抽象类型.在C++中,我想做类似以下的事情:
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;
};
Run Code Online (Sandbox Code Playgroud)
知道怎么做吗?
我不确定在C++中是否真的需要这个.
试图让自己处于寻找这种解决方案的设计师的位置,我会说需要这种约束来强制某些类型来遵守某些语法约定.
最有可能的是,这是必需的,因为通用算法需要语法约定:它不适用于没有定义这种类型关联的类型.
例如,下面的算法要求其参数的类型具有关联bar_type:
template<typename T>
bool foo(T t)
{
typedef typename T::bar_type FT;
FT ft;
...
}
Run Code Online (Sandbox Code Playgroud)
但是,如果是这样的话,就没有必要执行一个typedef有效约束的输入foo<>():简单地忽略了一个类型定义bar_type不会让它可以使用该类型有foo<>().
当然,只有在您真正尝试这样做时才会发现这一点,而不是之前.并且能够定义一个概念,例如HasBarType,然后强制执行某些类型以实现这个概念会很好; 另一方面,概念还不是C++的一部分,并且尽管它们是可取的,但它们可以在没有它们的情况下生存.