gpt4 book ai didi

C++:如何创建一个存储任何类型 vector 的 vector ?

转载 作者:行者123 更新时间:2023-11-28 02:01:03 25 4
gpt4 key购买 nike

我想将任何类型的 vector 存储在另一个 vector 中。因此,例如我有两个 vector 实例,“std::vector v1”和“std::vector v2”。我想把它们放到一个 vector 中。我已经这样尝试过:

std::vector<int> v1;
std::vector<std::string> v2;
std::vector< std::vector<boost::any> > vc;
vc.push_back(v1);

还有其他几种方法,但都不起作用。您知道可能的解决方案吗?

谢谢!

最佳答案

免责声明:我不推荐这样做。

但如果你坚持,这就是这种可憎行为的开始:

#include <vector>
#include <memory>
#include <functional>
#include <boost/any.hpp>


class any_vector
{
using any = boost::any;
struct concept
{
virtual any at(std::size_t) = 0;
virtual any at(std::size_t) const = 0;
virtual ~concept() = default;
};

template<class T>
struct model : concept
{
model(std::vector<T> v) : _data(std::move(v)) {}
virtual any at(std::size_t i) override { return boost::any(std::ref(_data.at(i))); }
virtual any at(std::size_t i) const override { return boost::any(std::cref(_data.at(i))); }
std::vector<T> _data;
};

concept& deref() { return *vec_; }
concept const& deref() const { return *vec_; }

std::unique_ptr<concept> vec_;

public:

boost::any at(std::size_t i) const { return deref().at(i); }
boost::any at(std::size_t i) { return deref().at(i); }

template<class T>
any_vector(std::vector<T> v)
: vec_(std::make_unique<model<T>>(std::move(v)))
{}
};

int main()
{
any_vector a(std::vector<int> { 1, 2, 3 });
any_vector b(std::vector<double> { 1.1, 2.2, 3.3 });

std::vector<any_vector> va;
va.push_back(std::move(a));
va.push_back(std::move(b));


auto anything = va.at(0).at(1);
// how you deal with the resulting `any` is up to you!
}

注意 any_vector::at(x) 将返回一个 boost::any ,它包含一个 const-ref 或一个对某个对象的引用。

编写有用的代码来推断事物是什么并使用它将是一个挑战......

关于C++:如何创建一个存储任何类型 vector 的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39512756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com