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

标签 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 困住了。但是依赖于更新的语言迭代的答案仍然会被接受(我会接受对一般观众来说最好的答案,即使我自己的需要需要其他东西。)

最佳答案

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

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

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

并将用作:

Derived<NAME1> a;

关于c++ - 是否可以在 C++ 类声明中模板化类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43008696/

相关文章:

c++ - Push_back 1D Vector as Row 到 2D Vector Array

c++ - gcc 函数属性 - 如何使用它们?

c# - 如何在数据库中存储这种类型的类关系?

c++ - 尝试了解名称何时出现在当前实例中

C++ 推断尖括号内类型的模板参数

c++ - 限制关键字是否在 gcc/g++ 中提供了显着的好处?

c++ - 传输 std::stringstream

java - 特许经营类的compareTo方法

c++ - 我无法创建公共(public)继承类 - 构造函数 C++ 有问题

c# - 如何在复杂的 WPF 场景中组织资源(样式,...)?