Нужен пример использования метафункции boost :: fusion :: filter_if

Учитывая тип boost :: fusion :: vector, я хочу отфильтровать все не-ref члены, чтобы получить новый тип. Например, это преобразовало бы boost :: fusion :: vector в
повышение :: фьюжн :: вектор. Я предполагаю, что мета-функция boost :: fusion :: filter_if могла бы сделать это,
но в документации нет примеров его использования. Мы ценим любые предложения.

0

Решение

Что-то вроде этого:

#include <iostream>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/algorithm/transformation/filter_if.hpp>
#include <boost/fusion/include/at_c.hpp>
#include <boost/fusion/include/equal_to.hpp>
#include <boost/fusion/include/make_vector.hpp>
#include <boost/mpl/assert.hpp>

using namespace boost::fusion;

int main(void)
{
int a = 10;
double b = 11.;
vector<int, int&, double, double&> vec(1, a, 13., b);

if(filter_if<boost::mpl::not_<boost::is_reference<boost::mpl::_>>>(vec) == make_vector(1, 13.))
std::cout << "MATCH" << std::endl;
}
0

Другие решения

Других решений пока нет …