使用boost :: mpl :: for_each迭代一个带有lambda的c ++ 14元组

时间:2014-06-18 23:18:57

标签: c++ lambda c++14 boost-mpl

是否可以使用boost :: mpl :: for_each迭代一个带有lambda的元组? MPL文档创建了一个远离调用大小的单独类,它迭代了给予for_each的类型,是否可以使用lambda?或者可以编写单独的类作为参数作为一个lambda,将应用于给予for_each的所有类型?像这样的东西,除了增量器应该采用lambda(在构造函数?中)定义要执行的操作,并且可以在for_each的调用站点写入:

#include "boost/mpl/for_each.hpp"
#include "tuple"

using namespace std;
using namespace boost::mpl;

template<class Tuple_T>
struct incrementer
{
    incrementer(Tuple_T& given) : tuple(given){}
    template<class T> void operator()(const T&)
    {
        // how to write this in main() instead?
        // [&](?){? += 1}?
        get<T>(this->tuple) += 1;
    }
    Tuple_T& tuple;
};

int main(){
    tuple<int, float, double> t{1, 2, 3};
    for_each<int, double>(incrementer<decltype(t)>(t));
    assert(get<0>(t) == 2);
    assert(get<1>(t) == 2);
    assert(get<2>(t) == 4);
    return 0;
}

0 个答案:

没有答案