需要使用boost :: fusion :: filter_if元函数的示例

时间:2012-11-18 18:20:14

标签: c++ boost-fusion

给定一个boost :: fusion :: vector类型,我想过滤掉所有非ref成员以获得一个新类型。例如,这会将boost :: fusion :: vector转换为 提高::融合:: vector的。我猜测boost :: fusion :: filter_if元函数可能能够做到这一点, 但是没有在文档中使用它的例子。任何建议将不胜感激。

1 个答案:

答案 0 :(得分: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;
}