[英]C++ use enum from different template class as function parameter
我有兩個模板類CarOwner
和Truck
。
// 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();
的函數聲明void setEnum();
。 如上面的代碼所示,我實際上想向函數傳遞CarOwner<T1,T2>::MyEnum color
類型的枚舉。 因為我需要#include "Truck.h"
類CarOwner
,我可以不包括CarOwner
在Truck
類。 此外,模板參數T1
和T2
在Truck
類中是未知的,因為它具有不同的模板類型G
我不知道如何正確地聲明此函數以接受CarOwner<T1,T2>::MyEnum
。 任何幫助表示贊賞!
編輯:模板參數G
是T1
和T2
的組合。
這段代碼僅是說明我的問題的示例,設計顯然很奇怪。
假設Truck實例化為Truck<DataContainer<T1,T2>>
,則可以編寫部分專門化的代碼:
template<typename G>
class Truck {
// whatever
};
template<typename T1,typename T2>
class CarOwner;
template<typename T1, typename T2>
class Truck<DataContainer<T1,T2>> {
void setEnum( typename CarOwner<T1,T2>::MyEnum color );
};
或者,您可以在OwnerType上對setEnum進行模板化:
template<typename G>
class Truck {
template<typename OwnerType>
void setEnum( typename OwnerType::MyEnum color);
};
// ...
void CarOwner<T1,T2>::DoSomething(){
this->truck_.template setEnum<CarOwner<T1,T2>>(this->color);
}
要么 ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.