如何解决一个 .lib 中的类定义能否取代或扩展另一个 .lib 中的定义?
我有一个 Commons.lib
项目,我在其中粘贴了很多重复使用的代码,但它已经变得太大了(破坏其中的解析器将停止 20 个不相关项目的工作,诸如此类)。我将其拆分以更好地隔离其组件,但遇到了许多小问题......我猜是“耦合”问题吗?
例如,我将处理 SDL 内容(跨平台窗口 API)的所有函数和类拆分到它自己的 CommonsSDL.lib
项目中,但一些类,特别是 class Color
有一些代码在其中引用了 SDL。我希望 Color
属于一个单独的 Commonscore.lib
,它不知道 SDL 存在,现在陷入困境。
// inside Commonscore.lib,which shouldn't depend on SDL
class Color : public glm::u8vec4 {
public:
Color(); // black transparent
Color(glm::u8vec4 color);
Color(uint8 r,uint8 g,uint8 b,uint8 a = 255);
Color(const uint8 * px,Endian en = ENDIAN_DEFAULT);
Color(uint32 hex32);
// all the non-construction methods omitted for brevity;
// no members in deFinition,besides those inherited from u8vec4
};
// inside CommonsSDL.lib,which depends on SDL and Commonscore.lib
class Color : public glm::u8vec4 {
public:
Color(SDL_Color color);
void setSDLColor(SDL_Color color);
SDL_Color getSDLColor() const;
};
我读到过,至少从可能仍然适用的旧 C++11 信息中,无法扩展类定义。无论如何,必须写一些可能严重影响 Color 行为的东西。
除非扩展,是否可以用Color
中的Commonscore.lib
定义代替Color
中CommonsSDL.lib
的定义?如果有必要,我不介意复制他们共享的代码,但没有找到有关这种可能性的任何信息。
我也尝试了一些预处理器的废话,但我开始意识到这可能是不可能的,因为 .lib 已经编译。
如果没有其他选择,我只需要把它吸干并切出耦合方法。有 31 个类具有类似于 Color 的小而烦人的耦合问题,修复它们会在 20 个项目中改变它们的接口,所以我在黑暗中寻找避免需要这样做的方法......当然,如果是这样的话是的,就是这样。
解决方法
除非扩展,是否可以用 CommonsSDL.lib 中的 Color 定义代替 CommonsCore.lib 中的 Color 定义?
您可以更改 CommonsCore.lib
的来源以使用 Color 的新定义并重新编译库。除此之外,不可能。而这种变化会导致 CommonsCore.lib 依赖于 SDL。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。