c/c++语言开发共享使用预处理器在C中进行模板化

我想知道为什么我以前从未见过以下方法在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); 

main.c

 #define TEMPLATE_TYPE int #include "container.h" int main() { Container_int c; c.data = 99923; } 

那么,情况如何呢?

如果您不打算用#3回答,我将非常感谢您对此技术的评论。

    你可以使用预处理器做出令人难以置信的事情(善与恶)。 它是否被认为是不好的风格是判断调用,它在很大程度上取决于所产生的代码的质量,可读性和可维护性。 复杂的预处理器宏很难编写,调试和维护。 但是,最好的C代码是您编写的代码,宏非常适合自动生成主题的变体。

    以下是预处理器(ab)使用的一些很好的例子:

    SimpleScalar代码使用类似于上面建议的模式,其中#include前面带有一个#define,它给标题指定了一些方向。

    如果您正在考虑认真使用预处理器,那么您应该查看Boost预处理器库 。 (不要被Boost的C ++根推迟,预处理器宏可以与C一起工作。)

    代替

     typedef struct { TEMPLATE_TYPE data; } MAKE_NAME(Container_, TEMPLATE_TYPE) 

    你可能想做

     #define MAKE_CONTAINER(type) typedef struct MAKE_NAME(Container_, type) { type data; } MAKE_NAME(Container_, type) 

    为了能够做到

     #include "container.h" MAKE_CONTAINER(int); MAKE_CONTAINER(double); int main() { Container_int c; // one way to go struct Container_double d; // my preferred way: don't typedef when not needed; let the structs be obvious. c.data = 99923; d.data = 3.5; } 

      以上就是c/c++开发分享使用预处理器在C中进行模板化相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562551.html

      (0)
      上一篇 2021年2月5日
      下一篇 2021年2月5日

      精彩推荐