等同于"typename",表示从属姓名确实是'template template parameter'
Equivalent of "typename", to indicate that a dependant name is indeed a 'template template parameter'
我们将无法找到正确语法的部分代码简化为一个最小的示例。
让我们假设以下定义(不要担心"为什么";)
template <class>
class Element
{};
template <template <class> class>
class Client
{};
template <class>
struct TemplatedProvider
{
template <class T>
using element_template = Element<T>;
};
现在,随着C++11的发展,我们可以使用类模板或类型别名模板来实例化Client
模板。以下函数编译得很好:
void fun()
{
Client<Provider::element_template> client;
Client<TemplatedProvider<int>::element_template> clientBis;
}
但是,在以下情况下,当给Client
的模板参数是一个依赖名称时,我们找不到正确的语法:
template <class T>
void templatedFun()
{
Client<TemplatedProvider<T>::element_template> client;
}
Clang(用3.6测试)发出以下编译错误:
template argument for template template parameter must be a class template or type alias template
我们能纠正这种语法吗?
必须是:
template <class T>
void templatedFun()
{
Client<TemplatedProvider<T>::template element_template> client;
}
您可以使用template
关键字:
template <class T>
void templatedFun()
{
Client<TemplatedProvider<T>::template element_template> client;
}
有关template
和typename
关键字的详细讨论,请参见此问题。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 传递给std::function template的template参数究竟代表什么
- 在template中使用std::variant的template函数
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- 为什么这段代码抱怨"a non-type template parameter cannot have type"?
- 如何抛出"template parameter"类型的异常?
- 重新定义类<template-parameter-1-2>的默认参数
- 为什么我会收到错误"parameter pack 'F' must be at the end of the template parameter list"
- C++:在模板快速排序功能中接收"couldn't deduce template parameter"错误
- MEX 编译给出"there are no arguments to ... that depend on a template parameter"错误
- Clang VS VC++: "error: declaration of 'T' shadows template parameter"
- 函子"can't deduce template parameter"的模板方法
- 对于相互转换的类型,有没有办法绕过"deduced conflicting types for parameter in template instantiation"?
- 模板专用化站点报告"too few template-parameter-lists"错误
- 模板专业化 -> 'too few template-parameter-lists'
- "Name The Template Parameter" 奇数定义
- 具有Non-type template Parameter成员函数的template类
- 等同于"typename",表示从属姓名确实是'template template parameter'
- 模板参数的template-parameter-list是什么意思?
- "multiple template parameter lists are not allowed" ?