可变参数模板模板专用化错误
variadic variadic template template specialisation error
我试图创建一个模板,该模板给定一组元函数和一个元函数,将此方法函数添加到提供的集合中。
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...>
{
};
- 元函数表示为可变参数模板。
- Dest 是一组现有的元函数
- Tpls 是 Dest 内容
- FirstTpl 是要添加到 Dest 开头的元函数
编译时出现以下错误:
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
猜测我想如何使用这样的东西,我想出了以下内容:
元函数的示例定义和一些元函数列表:
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>();
}
相关文章:
- C++类错误中的模板专用化
- 模板专用化会导致未定义的引用错误
- flat_hash_map.h:错误 C3203:"templated_iterator":非专用类模板
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- cpp 模板专用化,错误说参数 1 的类型为 T,这取决于参数 T
- 类模板部分专用化:编译器错误
- 为什么在源文件中专用模板不会导致错误?
- 函数模板(它是类模板的成员)的显式专用化会产生"partial specialization is not allowed"错误,为什么?
- C++模板 - 使用"std::is_same_v"而不是专用并避免编译错误?
- VS2017模板专用化错误无法从'Class *(__cdecl *)(Args...)'转换为'Class *(__cdecl *)(Args...)'
- 函数模板专用化生成链接错误
- 错误 C2908:显式专用化; 已被实例化
- 部分模板专用化错误
- 模板函数专用化的内部编译器错误
- 类模板方法的专用化,类型名称是类模板 - 错误:参数处的类型/值不匹配
- 错误 C2893:无法使用 CTPL 专用化函数模板
- gcc中变量模板的错误显式模板专用化
- Qt nmake:错误 C3203:"map":非专用类模板不能用作模板参数"base"的模板参数,预期为真实类型
- 声明无法解决"实例化后的显式专用化"错误
- 需要"override"案例时重叠模板部分专用化:如何避免错误?