Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板的语法有问题_C++_Templates_C++11_Variadic - Fatal编程技术网

C++ 模板的语法有问题

C++ 模板的语法有问题,c++,templates,c++11,variadic,C++,Templates,C++11,Variadic,我正在编写一个元函数multipartitionwithunarydepresses,在表单中使用 MultipartitionWithUnaryPredicates<Pack<Args...>, UnaryPredicates...>::type 问题在于试图完善上述代码 PartitionWithUnaryPredicate<Pack, First> 不编译。模板类型PartitionWithUnaryPredicate属于模板类类型,不是吗 更新:

我正在编写一个元函数
multipartitionwithunarydepresses
,在表单中使用

MultipartitionWithUnaryPredicates<Pack<Args...>, UnaryPredicates...>::type
问题在于试图完善上述代码

PartitionWithUnaryPredicate<Pack, First>
不编译。模板类型
PartitionWithUnaryPredicate
属于
模板类
类型,不是吗

更新: 多亏了Angew的提示,我现在的语法正确了:

template <template <typename, template <typename> class> class P, typename Pack, template <typename> class Pred, template <typename> class... Ts>
struct JoinSpecial : Join<typename P<Pack, Pred>::head, typename MultipartitionWithUnaryPredicates<typename P<Pack, Pred>::tail, Ts...>::type> {};

template <typename Pack, template <typename> class First, template <typename> class... Rest>
struct MultipartitionWithUnaryPredicates<Pack, First, Rest...> : JoinSpecial<PartitionWithUnaryPredicate, Pack, First, Rest...> {};
模板
结构JoinSpecial:Join{};
模板
结构MultipartitionWithUnaryPredicates:JoinSpecial{};

现在一切都正常了——我第一次使用模板,我必须说它看起来很难看。

在你对
JoinSpecial
的定义中,
Pack
是一个类模板。然后,在为
Join
指定模板参数时,您有
typename Pack::head
typename Pack::tail
。但是
Pack
是一个模板,而不是一个类-您需要为
Pack
提供模板参数,所以我需要的确切sytax是
template struct JoinSpecial:Join{}呼!模板模板。
template <template <typename, template <typename> class> class Pack, typename... Ts>
struct JoinSpecial : Join<typename Pack::head, typename MultipartitionWithUnaryPredicates<typename Pack::tail, Ts...>::type> {};
template <template <typename, template <typename> class> class P, typename Pack, template <typename> class Pred, template <typename> class... Ts>
struct JoinSpecial : Join<typename P<Pack, Pred>::head, typename MultipartitionWithUnaryPredicates<typename P<Pack, Pred>::tail, Ts...>::type> {};

template <typename Pack, template <typename> class First, template <typename> class... Rest>
struct MultipartitionWithUnaryPredicates<Pack, First, Rest...> : JoinSpecial<PartitionWithUnaryPredicate, Pack, First, Rest...> {};