关于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*

相关推荐
啦啦啦啦啦zzzz1 小时前
算法:回溯算法
c++·算法·leetcode
Lzg_na1 小时前
订阅发布模块事例
c++
郝学胜-神的一滴1 小时前
[简化版 GAMES 104] 现代游戏引擎 02:拆解现代游戏引擎5+1层级架构,吃透引擎底层核心逻辑
c++·unity·架构·游戏引擎·图形渲染·unreal engine·系统设计
汉克老师2 小时前
2026年CSP-J初赛分数线-----预测
c++·csp-j·小学生·学c++编程
脱胎换骨-军哥2 小时前
C++数据库存储引擎内核开发:B+树索引与MVCC并发控制的完整实现
数据库·c++·b树
小保CPP2 小时前
OpenCV C++将多张图像合并为webp动图
c++·人工智能·opencv·计算机视觉
乐观勇敢坚强的老彭3 小时前
信奥C++一维数组笔记
开发语言·c++·笔记
码上有光3 小时前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
王维同学3 小时前
[原创][Windows C++]Explorer Shell 扩展、图标覆盖与 COM 服务器定位
c++·windows·注册表
code_pgf3 小时前
C++ 工程架构设计规范
c++·机器人