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

Need example of using boost::fusion::filter_if metafunction

本文关键字:if 函数 filter boost fusion      更新时间:2023-10-16

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

像这样:

#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;
}