2017-08-14 77 views
0

我有一個Foo類,它需要T類型的值。我也想將它們存儲在矢量中。我嘗試了幾種方法,但沒有找到任何解決方案。請查看下面的源代碼以瞭解我想實現的目標。存儲泛型T類的C++向量

#include <iostream> 
#include <vector> 

template<class T> class Foo 
{ 
    public: 
     T getVar(T var) 
     { 
      return var; 
     } 
}; 

int main() 
{ 
    template<class T> 
    std::vector<Foo<T>> foos; 

    Foo<int> foo1; 
    Foo<double> foo2; 

    foos.push_back(foo1); // doesn't work this way 
    foos.push_back(foo2); 

    return 0; 
} 
+3

'Foo '和'Foo '是兩種*不同*類型。向量與數組一樣,只能存儲單個類型的元素。如果您有支持C++ 17的編譯器,請查看['std :: any'](http://en.cppreference.com/w/cpp/utility/any)或['std :: variant'](http ://en.cppreference.com/w/cpp/utility/variant),或者它們的Boost等價物。 –

+0

一旦檢索到矢量元素,你想做什麼?你能展示一些概念代碼嗎? –

+0

這個概念是一個分層架構,每層都可以有'T'型的狀態。我打算使用這些狀態通過網絡/ ...與上層(抽象)層進行通信。 – user3022069

回答

3

如前所述Foo<int>Foo<double>是不同的類型。同時template<typename T>Footemplate<class T>std::vector<Foo<T>>根本不是類型。他們可以被視爲類型的佈局。

如果您確實需要在一個容器中使用類型擦除方法來存儲完全不同的類型。例如來自C++ 17 STL的容器std::any。看看example