一个 .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定义代替ColorCommonsSDL.lib的定义?如果有必要,我不介意复制他们共享的代码,但没有找到有关这种可能性的任何信息。

我也尝试了一些预处理器的废话,但我开始意识到这可能是不可能的,因为 .lib 已经编译。

如果没有其他选择,我只需要把它吸干并切出耦合方法。有 31 个类具有类似于 Color 的小而烦人的耦合问题,修复它们会在 20 个项目中改变它们的接口,所以我在黑暗中寻找避免需要这样做的方法......当然,如果是这样的话是的,就是这样。

解决方法

除非扩展,是否可以用 CommonsSDL.lib 中的 Color 定义代替 CommonsCore.lib 中的 Color 定义?

您可以更改 CommonsCore.lib 的来源以使用 Color 的新定义并重新编译库。除此之外,不可能。而这种变化会导致 CommonsCore.lib 依赖于 SDL。