我目前用下面的代码中挣扎时,其意图是为了实现可变参数可变参数模板的模板:可变参数可变参数模板模板
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...>
Head<typename TailArgs...>
...”的扩展之前输出“...之前的预期参数包”。
This error is reproducable with gcc 4.5.1。
的参数名*内部'模板模板参数的template'规范是可选的,完全是化妆品;它实际上并不是真正的参数。 – 2012-03-12 06:33:19
@KerrekSB有没有办法获得模板模板参数的参数? – kmore 2012-03-12 06:43:00
我编辑了我的帖子;我错过了可变的情况。回答你的问题:是的,通过提供一个明确的模板参数(包)和匹配。 – 2012-03-12 06:53:31