我对宏有疑问。我怎么能通过宏模板类投射到普通类。例如:如何将模板类ptr转换为C++中的普通类ptr
#define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class##class_name))
template<typename T> A {};
if (RUNTIME_CLASS(A));
我知道这段代码不会编译,因为它不会看到模板位。但我不明白实际的宏。它的返回看起来像(CRuntimeClass*)(&classA)
为什么##
concatenate使class + A?以及预处理器如何理解这种符号?
##是预处理器的一个有用的功能。它允许通过串联创建令牌。 – 2009-09-30 10:46:30
我不明白你想要做什么。 这个班级是否是模板有什么不同? 它也看起来像你想要*类型*(A)并将其转换为指针。你不能。类型不是值。你是否想将'A *'类型的*对象*转换为'CRuntimeClass *'?你怎么知道把它转换成'CRuntimeClass *'是安全的? 请解释你正在尝试解决什么问题。那么我们可以告诉你,如果这是可能的,你应该怎么做。 – jalf 2009-09-30 11:05:46