Bất kỳ giải pháp nào tốt hơn là viết thủ công một tiện ích như thế này?Làm cách nào để lặp qua std :: tuple?
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));
}
Để được sử dụng như thế này:
std::tuple<char, int, double> tt;
TupleForEach(tt, (boost::lambda::_1 = 5));
Tiêu chí của bạn cho "tốt hơn" là gì? – Casey
@Casey - Triển khai thư viện trong 'std' hoặc' boost'; nếu không, sau đó thực hiện với ít mã thì điều này; hoặc có thể có vấn đề trong việc triển khai này. – Vahagn