我的问题可能不太清楚。 让我解释。 我有一个抽象的母班M,还有很多子班C1,C2,... Cn。 在每个孩子中,我必须定义如下模板类型:
class Child1 : public Mother
{
public:
typedef AnotherTemplateClass<Child1,int> Type1_C1;
typedef AnotherTemplateClass<Child1,bool> Type2_C1;
typedef AnotherTemplateClass<Child1,unsigned> Type3_C1;
void DoSomething(Type1_C1 a, Type2_C1 b, Type3_C1);
};
我想定义以下内容:
class Mother
{
public:
typedef AnotherTemplateClass<this,int> Type1_M;
typedef AnotherTemplateClass<this,bool> Type2_M;
typedef AnotherTemplateClass<this,unsigned> Type3_M;
};
并使用此类型的Child1
class Child1 : public Mother
{
void DoSomething(Type1_M a, Type2_M b, Type3_M c);
};
我知道不可能做到这一点
error: invalid use of ‘this’ at top level
但是有什么语法可以解决这个问题吗?
那有可能吗?
答案 0 :(得分:2)
CRTP可能会帮助:
template <typename Derived>
class ChildCrtp : public Mother
{
public:
typedef AnotherTemplateClass<Derived,int> Type1_C1;
typedef AnotherTemplateClass<Derived,bool> Type2_C1;
typedef AnotherTemplateClass<Derived,unsigned> Type3_C1;
Possibly:
//void DoSomething(Type1_C1 a, Type2_C1 b, Type3_C1);
};
然后
class Child1 : public ChildCrtp<Child1>
{
public:
void DoSomething(Type1_C1 a, Type2_C1 b, Type3_C1);
};