C++ 融合:向量&x2B;fusion::push_back=fusion::vector?

C++ 融合:向量&x2B;fusion::push_back=fusion::vector?,c++,boost-fusion,C++,Boost Fusion,我定义了一个包含两个元素的向量。然后我将_推回另一个元素,并期望结果类型也是向量。但事实并非如此 例如: typedef boost::fusion::vector<int, double> vec1; typedef boost::fusion::result_of::push_back<vec1, std::string> vec2; //boost::is_same<vec2, boost::fusion::vector<int, double, std

我定义了一个包含两个元素的向量。然后我将_推回另一个元素,并期望结果类型也是向量。但事实并非如此

例如:

typedef boost::fusion::vector<int, double> vec1;
typedef boost::fusion::result_of::push_back<vec1, std::string> vec2;
//boost::is_same<vec2, boost::fusion::vector<int, double, std::string>>::value == false
typedef boost::fusion::vector vec1;
typedef boost::fusion::result_of::push_back vec2;
//boost::is_same::value==false

我做错了什么


关于。

您已将
推回
本身别名为
vec2
。你需要使用

typedef boost::fusion::result_of::push_back<vec1, std::string>::type vec2;
typedef boost::fusion::result_of::push_back::type vec2;

但是请记住,类型可能仍然不同,不需要使用融合算法来保留类型(而且由于
push_back
函数应该返回一个惰性视图,那么
vec2
很可能是某种视图类型)。唯一的保证是
vec2
将是。

请告诉我,如何初始化vec2类型的对象?vec2v(33.14,“string”);链接:@niXman:
vec2v(boost::fusion::push_back(vec1(33.14),“string”)我猜。我真的不用Fusion,谢谢。我希望有更高的可用性。您可以使用as_vector来强制push_back的返回类型正确地充当向量