【发布时间】:2013-02-26 10:33:15
【问题描述】:
我正在尝试编写一个宏来协助在 C 中进行面向对象编程。由于我将类信息存储在一个常量结构中,因此我需要创建一个执行以下操作的宏:
- 获取对象的类型(解除引用的指针的类型)
- 附加
_info以获取所需 classInfo 结构的名称 - 获取该符号的地址,以便将其传递给函数
- 使用指向类结构和对象本身的指针调用
destroyObject函数
一个例子:
queue_t* p = NULL;
delete(p);
delete 应扩展为:
destroyObject(&(queue_t_info), p);
我尝试使用此宏,但无法开始工作:
#define delete(X) (destroyObject(&(typeof(*X)##_info), X))
我在 typeof 部分无法正常工作时遇到问题。
【问题讨论】:
-
你似乎认为类型有名字。
-
所以当传递一个整数的引用时,根本不可能让 preprossor 吐出
int? -
@melpomene 为什么你认为他们没有?
-
实际上,考虑到这一点,我意识到预处理器尚未解析我的代码,因此它无法将变量与类型相关联。我想出了一个不错的解决方案来解决这个问题。我会把它作为问题的答案发布。
-
当编程试图将语言(这里的 C)变成(某种)它不是的东西(OO,这里)时,你能做的最糟糕的事情。它只会让你的读者(可能在几周后你自己)感到非常困惑,甚至会欺骗编译器变得愚蠢/生成错误的代码。想要类似 C 的 OOP?选择 C++。
标签: c macros c-preprocessor