Мне нужна функция или функциональный объект, который может генерировать перестановку своих входных данных с перестановкой, указанной во время компиляции. Чтобы было ясно, я не собираюсь генерировать все перестановки, а только конкретную. Например, permute<1,4,3,2>( a, b, c, d )
вернет (a,d,c,b)
. Очевидно, это легко сделать с помощью перестановки определенной длины, например. 2, вот так
#include <boost/tuple.hpp>
template< unsigned a, unsigned b>
struct permute {
template< class T >
boost::tuple< T, T > operator()( T ta, T tb ) {
boost::tuple< T, T > init = boost::make_tuple( ta, tb );
return boost::make_tuple( init.get< a >(), init.get< b >() );
}
};
Но как мне это сделать для перестановки произвольной длины? Кроме того, есть ли более чистый способ написания приведенного выше кода? Да, приведенный выше код не ограничивается выполнением перестановок, поскольку разрешено permute<2,2>(a,b)
, но я не вижу в этом недостатка. Однако можно ли ограничиться только реальными перестановками?
nview
. Поскольку я использовал версию 1.39, я не заметил ... - person rcollyer   schedule 01.04.2011