我正在用C实现一个非常非常基本的组件系统,但现在我想要“动态”调用某些函数.设置非常简单:主程序只是一个无限循环,其中检查一些条件,并为每个启用的组件调用“进程”函数.
例如,现在它的工作原理如下:
while (1) { input_process(); network_process(); graphics_process(); }
但我想将它分成单独的组件,并以某种方式在中心位置定义使用哪些部件.这可以通过简单的定义来完成,如下所示:
#define HAS_NETWORK ... while (1) { input_process(); #ifdef HAS_NETWORK network_process(); #endif graphics_process(); }
正如你所看到的那样,1或者只有少数组件是正常的,但是如果我想在未来对所有这些(输入,网络和图形)和其他组件这样做,我将不得不将#ifdefs单独放入他们每个人都有,这很乏味.
components = {'input','network','graphics'} ... foreach component in components execute component_process()
这样,组件可以在将来轻松添加.
我不介意检查是在编译时还是在运行时完成(虽然我显然更喜欢编译时,但我可以想象运行时更容易实现).我不知道怎么开始.
解决方法
在编译时使用X宏:
COMPONENT( graphic,"3D graphics rendering" ) COMPONENT( network,"Network" ) COMPONENT( other,"usefull stuff" ) #undef COMPONENT
使用它:
#define COMPONENT( what,description ) what ## _process(); while (1) { #include "components.x" }
而在另一个地方,例如:
std::cout << "We use :\n" ; #define COMPONENT( what,description )\ std::cout << #what << " : " << description << "\n" ; #include "components.x"
并且可以将HAS_定义放在component.x中的单个位置:
#ifdef HAS_GRAPHIC COMPONENT( graphic,"3D graphics rendering" ) #endif #ifdef HAS_NETWORK COMPONENT( network,"Network" ) #endif #ifdef HAS_OTHER COMPONENT( other,"usefull stuff" ) #endif #undef COMPONENT
原文地址:https://www.jb51.cc/c/117701.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。