我的问题很简短:
我需要一个包含不同类型的向量,例如:
std::vector<int,double> vec;
vec.emplace_back((int) 1);
vec.emplace_back((double) 2.0);
我尝试使用boost:variant,但是问题是,每次有人要使用值时,都必须从向量中访问/获取数字。
我为向量定义了初始值,因此类型是静态的,并且是在编译时定义的。而且,我希望能够遍历它们(这就是为什么我使用向量的原因-它也可以是地图或任何其他容器)。
我想要的是在程序中使用像int或double这样的向量项,而不使用boost :: get或类似的东西。我认为这应该可行,因为每个条目的类型都是在编译时定义的,但是我不知道如何使它起作用。
double d=vec[1]*3.0; //this should somehow work
int i=vec[0]*8; //this also without any get or anything
我尝试使用元组,但是我对它们没有太多的经验,并且遍历它们似乎很困难。
for(auto &elem : vec) std::cout << elem << std:endl; //this or sth. similar should also work
任何帮助深表感谢。
您确实应该使用元组。CPP是一种强类型语言。处理它。
现在,如果要迭代,请考虑使用Boost Fusion:
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_io.hpp>
#include <boost/fusion/algorithm.hpp>
#include <boost/fusion/adapted/boost_tuple.hpp>
#include <boost/phoenix.hpp>
using namespace boost;
using namespace boost::phoenix::arg_names;
#include <iostream>
int main() {
tuple<int, double, std::string> demo(42, 3.1415, "hello pie universe");
fusion::for_each(demo, std::cout << arg1 << "\n");
auto& v2 = get<1>(demo);
v2 *= 10;
std::cout << "\nNew v2: " << v2 << "\n";
std::cout << "Tuple after edit: " << demo << "\n";
}
哪些印刷品
42
3.1415
hello pie universe
New v2: 31.415
Tuple after edit: (42 31.415 hello pie universe)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句