帶着幾分TMP的,這並不難畢竟:
template<unsigned ToGo, class T, T Arg, template<T...> class Target, T... Args>
struct generate_pack
: generate_pack<ToGo-1, T, Arg, Target, Args..., Arg>
{ // build up the 'Args' pack by appending 'Arg' ...
};
template<class T, T Arg, template<T...> class Target, T... Args>
struct generate_pack<0, T, Arg, Target, Args...>
{ // until there are no more appends to do
using type = Target<Args...>;
};
template<unsigned Num, class T, T Arg, template<T...> class Target>
using GeneratePack = typename generate_pack<Num, T, Arg, Target>::type;
template<unsigned int... TSIZE>
struct Base{};
template<unsigned int TORDER, unsigned int TDIM>
struct Derived
: GeneratePack<TORDER, unsigned, TDIM, Base>
{
};
Live example.
來源
2012-08-15 08:41:43
Xeo
哦,你可以遞歸派生?這很酷。 – jrok 2012-08-15 08:43:21
它被Boost.MPL作者稱爲模板元函數轉發。 – TemplateRex 2012-08-15 08:53:59