इस तरह की उपयोगिता मैन्युअल रूप से लिखने से बेहतर समाधान?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));
}
इस तरह इस्तेमाल किया जा करने के लिए:
उस पर पुनरावृति करने की आवश्यकताstd::tuple<char, int, double> tt;
TupleForEach(tt, (boost::lambda::_1 = 5));
"बेहतर" के लिए आपके मानदंड क्या हैं? – Casey
@ कैसी - 'std' या' boost' में लाइब्रेरी कार्यान्वयन; यदि नहीं, तो कम कोड के साथ एक कार्यान्वयन तो यह; या शायद इस कार्यान्वयन में एक मुद्दा है। – Vahagn