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

相关推荐
rainbow68891 小时前
Linux文件描述符与重定向原理
c++
CodeSheep程序羊2 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
编程小白20262 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
.小墨迹3 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
历程里程碑4 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴4 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
天若有情6734 小时前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密
czy87874754 小时前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
我在人间贩卖青春5 小时前
C++之继承的方式
c++·private·public·protected·继承方式
智者知已应修善业6 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法