如何有条件地确定在编译时调用哪些函数?

如何有条件地确定在编译时调用哪些函数?,第1张

概述我正在用C实现一个非常非常基本的组件系统,但现在我想要“动态”调用某些函数.设置非常简单:主程序只是一个无限循环,其中检查一些条件,并为每个启用的组件调用“进程”函数. 例如,现在它的工作原理如下: while (1) { input_process(); network_process(); graphics_process();} 但我想将它分成单独的组件,并以某种方式在中心位置 我正在用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.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_GRAPHICCOMPONENT( graphic,"3D graphics rendering" )#endif#ifdef HAS_NETWORKCOMPONENT( network,"Network" )#endif#ifdef HAS_OTHERCOMPONENT( other,"usefull stuff" )#endif#undef COMPONENT
总结

以上是内存溢出为你收集整理的如何有条件地确定在编译时调用哪些函数?全部内容,希望文章能够帮你解决如何有条件地确定在编译时调用哪些函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存