我试图创建一个给出一组元函数和元函数的模板,将这个函数添加到提供的集合中。
template<template<template<typename...> class...> class Dest,
template<typename...> class FirstTpl,
template<typename...> class ...Tpls>
struct template_push_front
{
};
template<template<template<typename...> class...> class Dest,
template<typename...> class FirstTpl,
template<typename...> class ...Tpls>
struct template_push_front<Dest, FirstTpl, Dest<Tpls...>> : Dest<FirstTpl, Tpls...>
{
};
编译时出现以下错误:
type/value mismatch at argument 3 in template parameter list for ‘template<template<template<class ...> class ...<template-parameter-2-1> > class Dest, template<class ...> class FirstTpl, template<class ...> class ... Tpls> struct template_push_front’
struct template_push_front<Dest, FirstTpl, Dest<Tpls...>> : Dest<FirstTpl, Tpls...>
expected a class template, got ‘Dest<Tpls ...>’
就行了
struct template_push_front<Dest, FirstTpl, Dest<Tpls...>> : Dest<FirstTpl, Tpls...>
关于
Dest<Tpls...>
令牌
我知道编译器无法识别Dest&lt; Tpls ...&gt;作为一个类模板。我该怎么做才能编译?
答案 0 :(得分:2)
猜猜我是如何使用这样的东西的,我想出了以下内容:
元功能的示例性定义和一些元功能列表:
template<class L, class R>
struct some_binary_metafunction {};
template<class T>
struct some_unary_metafunction {};
template< template<class...> class... MFs >
struct some_list_of_metafunctions {};
push_front
机制:
template< class List, template<class...> class MF >
struct push_front;
template< template< template<class...> class... > class ListT,
template<class...> class... ListEntries,
template<class...> class MF >
struct push_front< ListT<ListEntries...>, MF >
{
using type = ListT<MF, ListEntries...>;
};
测试用例/示例:
#include <iostream>
template<class T>
void print_type()
{
std::cout << __PRETTY_FUNCTION__ << "\n";
}
int main()
{
using my_list = some_list_of_metafunctions<some_binary_metafunction,
some_binary_metafunction,
some_unary_metafunction>;
using result = push_front<my_list, some_unary_metafunction>::type;
print_type<result>();
}