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

时间:2011-12-03 09:54:06

标签: 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::string>>::value == false

http://liveworkspace.org/code/361492801eebe24cc5679a1e899a5240

我做错了什么?

问候。

1 个答案:

答案 0 :(得分:2)

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

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

但请记住,类型可能仍然不一样,Fusion算法不需要保留类型(因为push_back函数应该返回一个惰性视图,然后vec2将最有可能是一些视图类型)。唯一的保证是vec2将为"A model of Forward Sequence."