我有兩個模板類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