2017-08-14 67 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