【发布时间】:2010-12-02 14:31:26
【问题描述】:
我对宏有疑问。我如何通过宏将模板类转换为普通类。例如:
#define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class##class_name))
template<typename T> A {};
if (RUNTIME_CLASS(A));
我知道这段代码不会编译,因为它看不到模板位。但我不明白实际的宏。它的返回看起来像(CRuntimeClass*)(&classA)
为什么## concatenate 会产生 class + A ?以及预处理器如何理解这种符号?
【问题讨论】:
-
## 是预处理器的一个有用功能。它允许通过连接创建令牌。
-
我不明白你在做什么。类是否是模板有什么区别?看起来您还想采用 type (A) 并将其转换为指针。你不能。类型不是值。是否要将
A*类型的object 强制转换为CRuntimeClass*?你怎么知道将它转换为CRuntimeClass*是安全的?请说明您要解决的问题。然后我们可以告诉你是否可行,以及你应该如何去做。
标签: c++ templates concatenation c-preprocessor