关于C++中的typedef typename的含义

关于C++中的typedef typename的含义

用于告诉编译器,我要使用的使类型。

假设

C++ 复制代码
template <typename CONFIG>
class Table {
  typedef typename CONFIG::Value VALUE;

public:
  void insert(VALUE v);
};

如果有一个结构体声明如下

C++ 复制代码
struct IntConfig {
  typedef int Value;
};

那么声明一个Table变量如下

C++ 复制代码
Table<IntConfig> t;

编译器在展开后会得到如下

C++ 复制代码
typedef int VALUE;

现在C++标准更倾向于使用

C++ 复制代码
using VALUE = typename CONFIG::Value;

JVM hotspot中,很多表的实现采用了上述的方式,以符号表为例说明

C++ 复制代码
template <typename CONFIG, MEMFLAGS F>
class ConcurrentHashTable : public CHeapObj<F> {
  typedef typename CONFIG::Value VALUE;
 private:
  // This is the internal node structure.
  // Only constructed with placement new from memory allocated with MEMFLAGS of
  // the InternalTable or user-defined memory.
  class Node {
   private:
    Node * volatile _next;
    VALUE _value;

很明显,这里使用了模板类,然后在VALUE _value需要替换为CONFIG::Value

这里的typedef typename告诉编译器我要使用的使CONFIG类的Value类型

假设

C++ 复制代码
typedef ConcurrentHashTable<SymbolTableConfig, mtSymbol> SymbolTableHash;

class SymbolTableConfig : public AllStatic {
private:
public:
  typedef Symbol* Value;  // value of the Node in the hashtable

可以看出,在SymbolTableConfig中定义了Value类型为Symbol*

于是对于ConcurrentHashTable中的Node类中的VALUE值就是Symbol*

相关推荐
handler012 分钟前
滑动窗口(同向双指针)算法:模板与例题解析
c语言·c++·笔记·算法·蓝桥杯·双指针·滑动窗口
Brilliantwxx5 分钟前
【算法题】基础计算器的不同实现方式
c++·算法
Sunsets_Red6 分钟前
P12375 「LAOI-12」MST? 题解
c++·算法·洛谷·信息学·oier·洛谷题解
雪度娃娃25 分钟前
多用户任务管理器
c++·个人开发
mmz120730 分钟前
深度优先搜索DFS3(c++)
c++·算法·深度优先
故事和你9132 分钟前
洛谷-【图论2-1】树6
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
不知名的老吴34 分钟前
在C++中不用宏怎么打日志的使用建议
开发语言·c++·算法
蜡笔小马1 小时前
09.C++设计模式-外观模式
c++·设计模式·外观模式
晚会者荣1 小时前
C++11_3:包装器,智能指针
c++
handler011 小时前
TCP(传输控制协议)核心机制与底层原理
linux·网络·c++·笔记·网络协议·tcp/ip·操作系统