【发布时间】:2017-09-29 10:32:51
【问题描述】:
我有 3 个具有相同“decideAction(game)”功能的 AI 文件
在运行游戏的主文件中:
在 C++ 中这很简单,因为我只使用了命名空间
namespace AI_A {
#include "AI_A.cpp"
}
namespace AI_B {
#include "AI_B.cpp"
}
namespace AI_C {
#include "AI_C.cpp"
}
在游戏中我做到了
if(turn == 0) { AI_A:decideAction(game); } etc....
有没有办法让我为 C 做到这一点?因为 C 没有命名空间或类?
每个 AI 文件本身都有很多函数和一个decisionAction 函数,所以我不能只#include 所有AI 文件并重命名decisionAction,因为2 个不同的AI 文件可能具有相同的函数名称/全局变量。
谢谢!
【问题讨论】:
-
包含实现 (
.cpp) 文件是一个非常糟糕的主意。你永远不应该包含定义(在 C++ 中它有点复杂)。命名空间应该在头文件中。并且 C 很好地具有名称空间,只是没有用户定义的名称空间。它们是不同的语言。 Siad 认为:重新考虑项目结构,因为它看起来很混乱。 -
一种选择是使用函数指针表。
-
@kaylum - 我认为所有函数的签名都必须不同才能使用函数指针表。在所述问题中,所有函数签名都是相同的,但在不同的文件中。这还有可能吗?谢谢。
-
@Nguaial “我认为所有函数的签名必须不同才能使用函数指针表”。不知道你从哪里得到这个想法。
-
@Nguaial 啊,这是一个不同的问题。当然有办法做到这一点,但哪种方式最好/合适取决于 OP 的全部要求。一种方法是让每个实现都有一个用于初始化或返回函数表的 API。然后,主代码将为每个实现调用该 API 以获取其函数表。这是常用的基本插件模型。
标签: c