如何创建一个存储任意类型向量的向量
C++: How to create a vector storing vectors of any type?
我想将任意类型的向量存储在另一个向量中。例如,我有两个向量实例,"std::vector v1"answers"std::vector v2"。我想把它们化成一个向量。我已经这样尝试过了:
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,该boost::any将包含const-ref或指向某个对象的ref。
编写有用的代码来推断东西是什么并使用它将是一个挑战…
相关文章:
- 访问存储在向量C++中的结构的多态成员
- 添加存储在向量中的大整数的函数出现问题
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何从用户那里获取输入并将其存储在向量中?
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 在二维向量或数组中可以存储的最大元素数是多少?
- 存储在堆分配向量中的指针的免费存储
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- Sqlite3:将数据库表名存储在向量中
- 如何在数组和向量 c++ 中存储和保存输入
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 代码将向量存储为向量<vector>,为什么没有错误消息?
- 替代STD ::向量存储参考而不是对象的副本
- 将向量存储在<file> CStringArray 中?
- 将可变大小结构的向量存储在c++中的二进制文件中
- 使用向量c++存储和洗牌一副牌
- 将指针向量存储在文件中并再次读取它们
- 是否可以/建议将向量存储在结构中?C++