是否可以在C ++类声明中模板化类名?

时间:2017-03-24 20:35:47

标签: c++ class templates

为了减少重复自己 - 而不需要诉诸#define - 我想做类似以下的事情:

template <class T>
class T final: public Base
{
public:
  T();
  virtual ~T();

private:
  void method1(T const& that);
  const T* method2(char const*);  // was pure-virtual in Base
};

一方面,我担心这是不允许的,因为上面的模板没有自己的名称来调用它:

typedef ???<DerivedFOO> DerivedFOO;

但另一方面,我知道C ++模板本身就是图灵完备的语言,所以也许有一些方法可以做到这一点并不是太难以理解?

  • 回答“使用#define是实现您需求最少混淆的方法”如果最终成为最引人注目的答案,我会接受。

  • 我现在卡在C ++ 11上。但是依赖于语言的新迭代的答案仍然会被接受(我会接受对一般观众来说最好的答案,即使我自己的需要还需要别的东西。)

1 个答案:

答案 0 :(得分:1)

这样可以达到你想要的效果吗?

enum NAMES 
{
    NAME1,
    NAME2,
    ....
};

template<int Name>
class Derived : public Base
{
...
};

并将用作:

Derived<NAME1> a;