【发布时间】:2013-03-01 09:26:59
【问题描述】:
我有从命令行运行的用 C 语言编写的科学模拟代码。用户在model.c 文件中提供输入模型作为一组 C 子例程,然后在运行时编译成代码。
某些模型属性并不总是与特定问题相关,但目前用户仍需要为该属性提供一个空的虚拟函数才能编译代码。
只有当用户提供的model.c 不包含该属性的子例程时,是否可以在源代码中嵌入模型属性的虚拟子例程?
例如,如果model.c 包含一个名为temperature() 的子例程,则代码应链接到该子例程,而不是src/dummy_function.c 中名为temperature() 的子例程。如果model.c 没有temperature(),编译器应该使用src/dummy_function.c 中的虚拟函数。
如果可能,我更喜欢在 model.c 文件中不需要预处理器指令的解决方案。
【问题讨论】:
-
使用c++类和继承怎么样?您可以创建一个将所有功能实现为虚拟的父类。然后每个想要使用函数的人都可以简单地在其派生类中重写它。
-
这确实是一个选择。然而,用 c++ 重新实现整个代码将是一项重大工作。我希望有一个不涉及重新设计代码的简单解决方案。
-
如何将
dummy_function.c重命名为main.c并提供给用户?想要使用某个函数的用户可以用真实函数替换该虚拟函数。