fusion :: vector + fusion :: push_back = fusion :: vector? - PullRequest
1 голос
/ 03 декабря 2011

Я печатаю определение вектора с двумя элементами.Затем я вставляю в него другой элемент и ожидаю, что тип результата также является вектором.Но это не так.

Пример:

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 Ответ

2 голосов
/ 03 декабря 2011

Вы присвоили псевдониму push_back значение vec2. Вам нужно использовать

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

Но имейте в виду, что тип может все еще не совпадать, алгоритмы Fusion не обязаны сохранять тип (а поскольку функция push_back должна возвращать ленивое представление, то vec2, скорее всего, будет некоторым тип просмотра). Единственная гарантия состоит в том, что vec2 будет «Модель прямой последовательности». .

...