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...> {};