Вам нужно unpack_args
и quoteN
, где N
- количество аргументов шаблона, которое принимает ваш шаблон. В качестве альтернативы, если вы реализуете function
как класс метафункций, вам не нужно quoteN
. Пример класса мета-функции, дающего первый из двух заданных типов:
struct function1st {
template<typename T1, typename T2>
struct apply { typedef T1 type; };
};
/* create a metafunction class that takes a sequence and apply it to function1st */
typedef unpack_args<function1st> unpacker;
Тогда вы можете использовать unpacker
как класс метафункций, который принимает последовательность
BOOST_MPL_ASSERT(( is_same< apply<unpacker, vector<int, char> >::type, int> ));
Или, если у вас есть шаблон, вы должны сначала процитировать его
template<typename T1, typename T2>
struct function1st { typedef T1 type; };
/* create a metafunction class that takes a sequence and apply it to function1st */
typedef unpack_args< quote2<function1st> > unpacker;
Надеюсь, это поможет.