我有两个模板类CarOwner
和Truck
。C++使用来自不同模板类的枚举作为函数参数
// CarOwner.h
#include "Truck.h"
template<size_t T1, typename T2>
class CarOwner {
public:
enum MyEnum {
red = 0,
green
}
void DoSomething();
private:
Truck<DataContainer<T1,T2>> truck_;
MyEnum color;
}
// CarOwner.hpp
template<size_t T1, typename T2>
void CarOwner<T1,T2>::DoSomething(){
this->truck_.setEnum(this->color);
}
// Truck.h
template<typename G>
class Truck {
void setEnum(CarOwner<T1,T2>::MyEnum color); // <---
}
我的问题是了解如何编写void setEnum();
的函数声明。如上面的代码所示,我实际上想通过函数传入一个类型为CarOwner<T1,T2>::MyEnum color
的枚举。因为我需要#include "Truck.h"
在类CarOwner
,我不能在Truck
类包括CarOwner
。此外,模板参数T1
和T2
在类Truck
内部是未知的,因为它具有不同的模板类型G
。
我不知道如何正确声明这个函数来接受CarOwner<T1,T2>::MyEnum
。任何帮助表示赞赏!
编辑: 模板参数G
是T1
和T2
的组合。
这段代码只是一个例子来说明我的问题,而且设计显然很奇怪。
这似乎是一个奇怪的设计。为什么车主*会有颜色? –
'DoSomething'必须先在'CarOwner'体中声明。 'Truck truck_;'不会工作,因为'Truck'是一个模板,所以您需要将'G'作为额外的'CarOwner'模板参数传递。 'setEnum'也需要成为一个模板。 – VTT
感谢提示。我真的想避免为'CarOwner'添加额外的模板参数。难道不可能以某种方式向卡车中宣布CarOwner? – DummySenior