2014-05-22 76 views
1

在C++中,假設我有一個模板化類,像C++:任意模板類型集裝箱

template <typename T> 
class Foo 
{ 
    ... 
}; 

,並假設我有幾種富的對象,像

Foo<int> intFoo = Foo<int>(); 
Foo<double> doubleFoo = Foo<double>(); 
... 

等。

其實,它比這還差。例如,我真的需要一個從Foo < int>繼承的類的intFoo對象。

我願做這樣的事情:

std::vector<Foo<?> > aVector; 
aVector.push_back(intFoo); 
aVector.push_back(doubleFoo); 

牢記我已大大簡單化了我的設計的情況下,有一個簡單的方法來做到這一點?

回答

1

一個解決辦法是讓你的美孚從空基類繼承

struct CommonBase {}; 

template<typename T> 
class Foo : public CommonBase 
{ 
    // ... 
}; 

,然後有指針的容器的共同基礎

vector<CommonBase*> v; 

如果你想從保持距離繼承,您可以使用boost:any在您的容器中存儲任何類型。

一個有趣的話題來看看(如果你想手動實現這樣的事情)是類型擦除

1

Foo<int>Foo<double>是2個不同的類別,儘管他們共享名稱Foo,所以你不能把它們按原樣放到vector。但是您可以使用boost::variant並存儲變體向量。