私は2つのテンプレートクラスCarOwner
とTruck
を持っています。C++は、異なるテンプレートクラスのenumを関数パラメータとして使用します。
// 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
型の列挙型関数を渡したいと思います。 CarOwner
に#include "Truck.h"
が必要なので、Truck
クラスにCarOwner
を含めることはできません。さらに、テンプレートパラメータT1
およびT2
は、異なるテンプレートタイプG
を持つので、クラスTruck
の中では不明です。
CarOwner<T1,T2>::MyEnum
を受け入れるようにこの関数を正しく宣言する方法がありません。どんな助けもありがとう!
編集: テンプレートパラメータG
はT1
とT2
の組み合わせです。
このコードは、私の問題を示す単なる例であり、デザインは明らかに奇妙です。
これは奇妙なデザインのようです。なぜ車の所有者*は色を持っていますか? –
'DoSomething'はまず' CarOwner'本体で宣言しなければなりません。 'Truck truck_;'は 'Truck'がテンプレートであるため動作しませんので、' G'を余分な 'CarOwner'テンプレートパラメータとして渡す必要があります。 'setEnum'もテンプレートである必要があります。 – VTT
ヒントのおかげで。私は本当に 'CarOwner'に余分なテンプレートパラメータを追加することを避けたいと思います。どういうわけか、 'CarOwner'を' Truck'で宣言することはできないでしょうか? – DummySenior