簡體   English   中英

C ++使用來自不同模板類的枚舉作為函數參數

[英]C++ use enum from different template class as function parameter

我有兩個模板類CarOwnerTruck

// 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 ,我可以不包括CarOwnerTruck類。 此外,模板參數T1T2Truck類中是未知的,因為它具有不同的模板類型G

我不知道如何正確地聲明此函數以接受CarOwner<T1,T2>::MyEnum 任何幫助表示贊賞!

編輯:模板參數GT1T2的組合。

這段代碼僅是說明我的問題的示例,設計顯然很奇怪。

假設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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM