2011-12-03 63 views
1

我用兩個元素typedef一個向量。然後我push_back到另一個元素,並期望什麼結果類型也是一個向量。但事實並非如此。fusion :: vector + fusion :: push_back = fusion :: 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

我在做什麼錯?

問候。

回答

2

您已將push_back本身別名爲vec2。您需要使用

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

但是請記住,類型可能仍然是不一樣的,融合算法不需要保存類型(以及因爲push_back功能應該返回一個懶惰的觀點,那麼vec2會最有可能是某種視圖類型)。唯一的保證是vec2"A model of Forward Sequence."

+0

請告訴我,我如何初始化vec2類型的對象? – niXman

+0

@niXman:你是什麼意思? –

+0

vec2 v(33,.14,「string」);鏈接:http://liveworkspace.org/code/6d35d3211640ee62174dced31a28d937 – niXman