c++泛型向量
C++ Generic Vector
是否可以在c++中创建多种类型的矢量?我希望能够构建和迭代一个包含许多不同类型的向量。例如:
vector<generic> myVec;
myVec.push_back(myInt);
myVec.push_back(myString);
etc...
vector需要能够保存不同的数据类型。是否有另一种类似向量的类型我应该在c++库中使用?
您可以使用boost::any
。例如:
#include <vector>
#include <boost/any.hpp>
#include <iostream>
struct my_class { my_class(int i) : x{i} { } int x; };
int main()
{
std::vector<boost::any> v;
v.push_back(42);
v.push_back(std::string{"Hello!"});
v.push_back(my_class{1729});
my_class obj = boost::any_cast<my_class>(v[2]);
std::cout << obj.x;
}
如果您想将允许的类型集限制在某个定义的范围内,您可以使用boost::variant
来代替:
#include <vector>
#include <boost/variant.hpp>
#include <iostream>
struct my_class { my_class(int i) : x{i} { } int x; };
int main()
{
typedef boost::variant<int, std::string, my_class> my_variant;
std::vector<my_variant> v;
v.push_back(42);
v.push_back("Hello!");
v.push_back(my_class{1729});
my_class obj = boost::get<my_class>(v[2]);
std::cout << obj.x;
}
boost::variant
也支持访问。您可以定义一个访问者,它可以处理变量
struct my_visitor : boost::static_visitor<void>
{
void operator () (int i)
{
std::cout << "Look, I got an int! " << i << std::endl;
}
void operator () (std::string const& s)
{
std::cout << "Look, I got an string! " << s << std::endl;
}
void operator () (my_class const& obj)
{
std::cout << "Look, I got a UDT! And inside it a " << obj.x << std::endl;
}
};
然后调用,如下所示:
int main()
{
typedef boost::variant<int, std::string, my_class> my_variant;
std::vector<my_variant> v;
v.push_back(42);
v.push_back("Hello!");
v.push_back(my_class{1729});
my_visitor mv;
for (auto const& e : v)
{
e.apply_visitor(mv);
}
}
下面是一个的实例。关于boost::variant
的好处是,它将执行编译时检查,以确保您的访问者可以处理该变体可以容纳的所有类型。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 链表的泛型函数remove()与成员函数remove)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何编写将要继承的泛型代码?
- C++17 如何保存泛型可调用对象以供以后使用
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- C++泛型类错误,问题出在哪里?
- C++泛型类,单独实现?
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 泛型枚举和其他类型的重载模板函数
- 使用泛型类型推送到堆栈时出现问题
- 可变参数泛型 lambda 和函数重载
- C++存储泛型 T 类型类的向量
- 在C++中实现泛型向量类
- 泛型向量类,对泛型数组成员进行 0 大小引用;
- c++泛型向量
- 泛型向量类实现
- 如何在动态内存中排序对象列表,在c++中使用泛型向量