我可能會問錯誤的方式這個問題定義,但我想在對象實例化定義的成員容器。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();
};
}
但隨着空指針的問題是我不知道我會怎樣確定對象所持有的容器的類型!另外我從來沒有使用過空指針!
如果解決方案是,如果我創建具有非常相似的功能(同名)的MenuItems使用空指針我可以給他們打電話,通過取消引用到空指針(S)。
一個替代方案是使用[性病::任何](http://en.cppreference.com/w/cpp/utility/any)如果您使用C++ 17,或'升壓:: any'如果你不是。如果您事先知道所有類型,還有'std :: variant'(C++ 17)和'boost :: variant'。 – Jonesinator