私は現在、次のコード、可変長可変長引数テンプレートテンプレートを実装することであることを意図して苦労しています:理想的には可変個引数可変引数テンプレートテンプレート
template
<
template <typename... HeadArgs> class Head,
template <typename... TailArgs> class...
>
struct join<Head<typename HeadArgs...>, Head<typename TailArgs...>...>
{
typedef Head<typename HeadArgs..., typename TailArgs......> result;
};
、私は達成するために、このテンプレートメタ関数を使用することができるだろう次
template <typename...> struct obj1 {};
template <typename...> struct obj2 {};
typedef join
<
obj1<int, int, double>,
obj1<double, char>,
obj1<char*, int, double, const char*>
>::result new_obj1;
typedef join
<
obj2<int, int, double>,
obj2<double, char>,
obj2<char*, int, double, const char*>
>::result new_obj2;
/* This should result in an error, because there are
different encapsulating objects
typedef join
<
obj1<int, int, double>,
obj1<double, char>,
obj2<char*, int, double, const char*>
>::result new_obj;
*/
上記の出力は、願わくは形態でnew_obj1
とnew_obj2
を作成しtemplate<int, int, double, double, char, char*, int, double, const char*> struct new_obj[1|2] {};
私は出力のWindows上でGCC 4.6.2を使用しています「の前に期待されるパラメータパックを 『...』」の拡大のために、 『Head<typename TailArgs...>
...』。
This error is reproducable with gcc 4.5.1。
引数*名前を。実際のパラメータとしては実際には利用できません。 –
@KerrekSBテンプレートテンプレートパラメータのパラメータを取得する方法はありますか? – kmore
私の投稿を編集しました。私はvariadicの場合を逃していました。あなたの質問に答えて:はい、明示的なテンプレートパラメータ(パック)とマッチングを提供します。 –