2011-12-03 17 views
1

2つの要素を持つベクトルを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です。あなたはタイプがまだ同じ、フュージョンアルゴリズムが型を維持するために必要な(とpush_back機能が怠惰なビューを返すことを想定しているので、その後、vec2意志されていないではないかもしれないことを

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

を使用していますが、心に留めておく必要がありますほとんどの場合、いくつかのビュータイプがあります)。唯一の保証は、vec2"A model of Forward Sequence."になることです。

+0

教えてください。vec2型のオブジェクトを初期化するにはどうしたらいいですか? – niXman

+0

@niXman:どういう意味ですか? –

+0

vec2 v(33、.14、 "string");リンク:http://liveworkspace.org/code/6d35d3211640ee62174dced31a28d937 – niXman