为了减少重复自己的次数——并且不需要求助于 #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/