我想創建一個通用容器,它可以存儲類型爲Wrapper的異構對象< T>其中T可以是任何用戶定義的類型。我見過boost :: any和其他解決方案,但我不能重新調用函數foo()而不重新編寫(我不知道重寫哪種類型,關於T的信息會丟失。)它會回到原始類型。在C++中存儲特定模板的對象的通用容器
我該如何合理地實現一個通用容器/使用現有的通用容器來實現這一點?
template <typename T>
class Wrapper{
public:
Wrapper(const T& a):o(a){};
Wrapper(){};
//public methods
void foo(){
//do stuff
};
private:
T o;
};
class X{};
class Y{};
int main(){
X x;
Y y;
A_GENERIC_CONTAINER generic_container;
// A_GENERIC_CONTAINER should be able to store
// any number of heterogeneous objects of type Wrapper<T>
// where T can be any user defined type.
generic_container.push_back(x);
generic_container.push_back(y);
auto it = generic_container.begin();
auto end = generic_container.end();
while(it != end){
it->foo();
++it;
}
}
也許這會有幫助。這是從自己的人:http://www.stroustrup.com/bs_faq2.html#containers –
謝謝尼科斯,但問題是我不能使用任何或普通類的向量 - 包裝和包裝是2個不同的類總而言之 - 所以沒有運行時多態性。 –
如果我下降到(無效*)我必須重鑄是包裝使用foo,我已經在T –