gpt4 book ai didi

c++ - 如何定义可以继承的模板特定类型?

转载 作者:行者123 更新时间:2023-11-30 03:15:42 32 4
gpt4 key购买 nike

我的问题可能没有我想的那么清楚。让我解释。我有一个抽象的母类 M,还有很多子类 C1、C2、...Cn。在每个 child 中,我必须像这样定义模板类型:

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);
};

我知道那是不可能的

错误:在顶层无效使用“this”

但是有什么语法可以解决这个问题吗?

这可能吗?

最佳答案

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);
};

关于c++ - 如何定义可以继承的模板特定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56834197/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com