在调用C++ template函数时,有时候语法会存在歧义。

  • 调用函数时,使用 obj.template func<...>() 形式的语法,避免歧义;
  • 调用类型时,使用嵌入子类型时,使用 a_type::typename sub_type形式的语法,避免歧义。

typename关键字

例如template代码中有定义:T::iterator,它只有等到模板实例化时才会知道是哪种类型,更不用说内部的iterator。T::iterator实际上可以是以下三种中的任何一种类型:

  • 静态数据成员
  • 静态成员函数
  • 嵌套类型
template <class T>
void foo() {
typename T::iterator * iter;
// ...
}

这样编译器就可以确定T::iterator是一个类型,消除了前面提到的歧义。

template关键字

例如有如下代码,会引起歧义:

namespace boost { int function = 0; }
int main() {
int f = 0;
boost::function< int() > f;
}

语句中的"<",">"可以被解释成大于、小于。

针对这些有歧义的自定义template(boost::function实际可以正常被编译期识别,但用户自定义template不行),template的几种用法:

  • t::template f(); // call a function template
  • this->template f(); // call a function template
  • obj.template f(); // call a function template

引用

(C++) C++ template笔记 -- template关键字及typename关键字的更多相关文章

  1. typedef和typename关键字

    .类型说明typedef 类型说明的格式为: typedef 类型 定义名; 类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型.定义名表示这个类型的新名字. 例如: 用下面语句定义整型数 ...

  2. <转>详解C++的模板中typename关键字的用法

    用处1, 用在模板定义里, 标明其后的模板参数是类型参数. 例如: template<typename T, typename Y> T foo(const T& t, const ...

  3. C++中的关键字用法---typename

    1. typename 关键字 "typename"是一个C++程序设计语言中的关键字.当用于泛型编程时是另一术语"class"的同义词.这个关键字用于指出模板 ...

  4. C++ 模板template和template

    原文链接:https://blog.csdn.net/skyleung/article/details/42195509 template<class T>和template<typ ...

  5. typename 关键字

    1.class关键字的同义词 template <typename T> const T& max(const T& x, const T& y) { return ...

  6. C++中typename关键字的用法

    我在我的 薛途的博客 上发表了新的文章,欢迎各位批评指正. C++中typename关键字的用法

  7. Django.template框架 template context (非常详细)

    前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的 这会导致几个问题: 1,显然,任何页面的改动会牵扯到Python代码的改动 网站的设计改动会比Python代码改 ...

  8. 《Java编程思想》读书笔记-基本规范、注释、static关键字、import关键字

    扫一扫加我的微信公众号,和我一起打好Java的基础 本文作为构建第一个Java程序的番外篇二,主要跟大家伙儿从浅层次的探讨下Java中的关键字import和static,此外为了让我们的代码可读性更强 ...

  9. Error resolving template [xxx], template might not exist or might not be exist

    Springboot+thymeleaf+mybatis 抛Error resolving template [xxx], template might not exist的异常 原因是我们在pom. ...

  10. Error resolving template: template might not exist or might not be accessible是一句缩水报错?

    一 thymeleaf在开发的时候本地调试正常,但是在测试环境打成jar包就报这个错误了. 二 template might not exist or might not be accessible ...

随机推荐

  1. KingbaseES R6 集群启动‘incorrect command permissions for the virtual ip’故障案例

    案例说明: KingbaseES R6集群启动时,出现"incorrect command permissions for the virtual ip"故障,本案例介绍了如何分析 ...

  2. 果汁 DI 介绍

    Guice (英音同 'juice[果汁]') 是一个为 JDK8 及以上提供的轻量依赖注入框架. 目录 三级标题 三级标题 四级标题 三级标题 三级标题 /** * Animal */ interf ...

  3. 华南理工大学 Python第4章课后小测-1

    1.(单选)下面程序的输出结果是: for c in "ComputerScience": print(c,end="") if c=="S" ...

  4. ECON 模式

    ECON模式通过调节发动机和空调系统的性能,有效提高燃油经济性. 在D行驶档的时候开启

  5. 使用logstash读取MySQL数据传输到es,并且@timestamp字段采用MySQL中的字段时间--建议采用这个

    MySQL中数据样式 ES中数据样式 input { jdbc { jdbc_connection_string => "jdbc:mysql://192.168.0.145:3306 ...

  6. Springboot之 Mybatis 多数据源实现

    简介 上篇讲解了 JPA 多数据源实现:这篇讲解一下 Mybatis 多数据源实现 .主要采用将不同数据库的 Mapper 接口分别存放到不同的 package,Spring 去扫描不同的包,注入不同 ...

  7. 「Tubian」Tubian0.4!完全开源!

    Tubian是我自己维护的Linux发行版.Tubian基于Debian,提供了开箱既用的Wine和Waydroid,装好就有对Android应用和Windows程序的兼容. Sourceforge. ...

  8. 改善C#程序的方法-1 操作字符串

    正确操作字符串 引言: 字符串是使用很频繁的一种数据类型. 如果使用不慎,则会为一次字符串操作所带来的额外性能开销而付出代价. 下面从这几个方面来探讨如何正确操作字符串: 1.确保尽量少的装箱,尽可能 ...

  9. 关于WinSCP如何通过Tunnel隧道进行远程连接-进行文件的传输

    对于公司业务相关的重要的Linux服务器,一般都会限制源IP登录,一般就会使用到jumper server(跳板机) 这样一来,我们的Client就无法直接ssh/scp/sftp到目标服务器了,这样 ...

  10. The XOR Largest Pair (trie树)

    题目描述 在给定的 NN 个整数 A_1,A_2,--,A_NA1​,A2​,--,AN​ 中选出两个进行xor运算,得到的结果最大是多少?xor表示二进制的异或(^)运算符号. 输入格式 第一行输入 ...