fusion::vector + fusion::push_back = fusion::vector?

fusion::vector + fusion::push_back = fusion::vector?

本文关键字:fusion vector back push      更新时间:2023-10-16

我定义了一个有两个元素的vector。然后我将另一个元素push_back放入其中,并期望结果类型也是vector。但事实并非如此。

的例子:

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
http://liveworkspace.org/code/361492801eebe24cc5679a1e899a5240

我做错了什么?

问候。

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

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

但是请记住,类型可能仍然不相同,Fusion算法不需要保留类型(并且由于push_back函数应该返回一个惰性视图,那么vec2将很可能是一些视图类型)。唯一的保证是vec2将是"正向序列的一个模型"。