为了减少重复自己 - 而不需要诉诸#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上。但是依赖于语言的新迭代的答案仍然会被接受(我会接受对一般观众来说最好的答案,即使我自己的需要还需要别的东西。)
答案 0 :(得分:1)
这样可以达到你想要的效果吗?
enum NAMES
{
NAME1,
NAME2,
....
};
template<int Name>
class Derived : public Base
{
...
};
并将用作:
Derived<NAME1> a;