【发布时间】:2013-08-11 21:47:06
【问题描述】:
有比手动编写这样的实用程序更好的解决方案吗?
template < size_t > struct SizeT { };
template < typename TupleType, typename ActionType >
inline void TupleForEach( TupleType& tuple, ActionType action )
{
TupleForEach( tuple, action, SizeT<std::tuple_size<TupleType>::value>() );
}
template < typename TupleType, typename ActionType >
inline void TupleForEach( TupleType& tuple, ActionType action, SizeT<0> ) { }
template < typename TupleType, typename ActionType, size_t N >
inline void TupleForEach( TupleType& tuple, ActionType action, SizeT<N> )
{
TupleForEach( tuple, action, SizeT<N-1>() );
action( std::get<N-1>( tuple ) );
}
这样使用:
std::tuple<char, int, double> tt;
TupleForEach( tt, (boost::lambda::_1 = 5) );
【问题讨论】:
-
你对“更好”的标准是什么?
-
@Casey --
std或boost中的库实现;如果没有,那么代码更少的实现;或者这个实现中可能存在问题。
标签: c++ c++11 foreach tuples template-meta-programming