Nik*_*s R 2 c templates c-preprocessor
我想知道为什么以前从未见过以下用C实现模板的方法。我的想法是使预处理器进入模板工作。
container.h:
#ifndef TEMPLATE_TYPE
#error "missing decalaration TEMPLATE_TYPE"
#endif
#define _CONCAT(a, b) a##b
#define _EVALUATOR(a, b) _CONCAT(a, b)
#define MAKE_NAME(a, b) _EVALUATOR(a, b)
typedef struct {
TEMPLATE_TYPE data;
} MAKE_NAME(Container_, TEMPLATE_TYPE);
Run Code Online (Sandbox Code Playgroud)
main.c:
#define TEMPLATE_TYPE int
#include "container.h"
int main() {
Container_int c;
c.data = 99923;
}
Run Code Online (Sandbox Code Playgroud)
那是什么情况
当您不打算回答#3时,我希望对这种技术发表评论。
小智 5
您可以使用预处理器完成不可思议的事情(善与恶)。是否将其视为不良样式是一个判断调用,并且在很大程度上取决于所生成代码的质量,可读性和可维护性。复杂的预处理器宏很难编写,调试和维护。但是,最好的C代码是您不编写的代码,宏非常适合自动生成主题变体。
以下是预处理器(ab)使用的一些好示例:
SimpleScalar代码使用与上面的建议类似的模式,其中#include之前是#define,它为标头提供了一定的方向。
如果您考虑认真使用预处理器,则应查看Boost预处理器库。(不要被Boost的C ++根推迟,预处理器宏可以与C一起正常工作。)