この質問に間違った方法で質問しているかもしれませんが、オブジェクトのインスタンス化でメンバーコンテナを定義したいと考えています。私はこの問題を回避することができコンストラクトで定義されたC++コンテナ
namespace GUI {
class MenuNode {
template <typename TMenuItem>
struct MenuItem{
TMenuItem *text;
};
MenuItem<unknown> t;//The member where I want the container
//to be defined upon construction
public:
std::vector<MenuNode*> forward;
MenuNode* parent;
MenuNode();
~MenuNode();
};
}
一つの方法は、MenuNodeテンプレートクラス自体にすることですが、私は必要なのコンテナ(リンクリストスタイル)で前方と後方ポインタを持っているだろうと私はどちらか彼らのコンテナタイプを知ることができません!
namespace GUI {
template<class MenuItem>
class MenuNode {
MenuItem t;
public:
std::vector<MenuNode<unknown>*> forward; //Here I wouldn't know
//what the container will
//even be!
MenuNode<unknown>* parent; //same with this member
MenuNode();
~MenuNode();
};
}
だから、代わりにかかわらず、メンバーのコンテナ
namespace GUI {
template<class MenuItem>
class MenuNode {
MenuItem t;
public:
std::vector<void*> forward;
void* parent;
MenuNode();
~MenuNode();
};
}
のアドレスを指す可能性がポインタ型を有することになる。しかし、ボイドポインタの問題は、私は私が決めるだろうかわからないですオブジェクトが保持しているコンテナのタイプ私は空ポインタを使用したことがない!
非常によく似た関数(同じ名前)を持つMenuItemを作成する場合、voidポインタを使用することができれば、voidポインタへの逆参照によってそれらを呼び出すことができます。
代わりに、[std :: any](http://en.cppreference.com/w/cpp/utility/any)を使用している場合は、C++ 17や 'boost :: any' ifあなたではない。前もってすべての型を知っているなら 'std :: variant'(C++ 17)と' boost :: variant'もあります。 – Jonesinator