C++:纯虚拟类型

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)

知道怎么做吗?

And*_*owl 5

我不确定在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++的一部分,并且尽管它们是可取的,但它们可以在没有它们的情况下生存.