难以创建可以保存任何数据类型的模板化通用向量

时间:2016-12-01 20:53:37

标签: c++ c++14

正如主题所示,我正在尝试创建一个可以包含任何数据类型的向量。我正在尝试使用模板,以便将来可以更加维护代码。

#include<iostream>
#include<memory>
#include<vector>

struct prime{
    public:
        template<typename T>
        T  get();
};

template<typename T>
struct foo: prime{
    public:
        T i;
        foo(T k):i(k){
        }
        template<typename T1>
        T1 get(){
            return i;
        }

};

/*
struct fooString :prime{
    public:
        std::string i;
        fooString(std::string k):i(k){
        }
};
*/
int main(){
    std::vector<std::shared_ptr<prime>> v;
    std::shared_ptr<foo<int>> p1 = std::make_shared<foo<int>>(0);
    std::shared_ptr<foo<char>> p3 = std::make_shared<foo<char>>('H'); 
    //std::shared_ptr<fooString> p2 = std::make_shared<fooString>("HK");
    v.push_back(p1);
    v.push_back(p3);
    //v.push_back(p2);
    //std::cout<<v[0]->i<<" "<<v[1]->i<<std::endl;
    //std::cout<<static_cast<foo<int>>(*v[0]).get();
    std::cout<<v[0]->get<int>();
}

评论代码是我尝试解决此问题的不同方法。但我无法解决这个问题。任何建议都会对我有所帮助。我尝试了this SO,但正如我所说,创建不同数据类型的联合很难维护。并且boost::variant也没有帮助,因为我必须提供它需要预先掌握的所有类型。我不想要那个限制。任何人都可以建议我是否有可能或者我只是想要实现不可能的事情? 我脑子里还有另一种算法,就像把所有东西都串起来存放一样。但这种方法看起来并不恰当。

谢谢:)

1 个答案:

答案 0 :(得分:0)

如果您想拥有一个可以存储任何类型的容器,但实际上没有提供任何关于它的信息 - 那么您只需知道每个元素实际存储的类型,那正是std::any(基于Boost.Any)的意思。

您案例中的用法是:

std::vector<std::vector<int>> HArray(num_rows, std::vector<int>(num_cols));