一个 .lib 中的 class 定义可以取代或扩展另一个 .lib 中的定义吗?
Can a class definition from one .lib supplant or extend a definition from another .lib?
我有一个 Commons.lib
项目,我在其中粘贴了很多重复使用的代码,但它已经变得太大了(破坏其中的解析器会停止 20 个不相关项目的工作,诸如此类) ).我将它拆分是为了更好地隔离它的组件,但是 运行 分成许多小的......我猜是“耦合”问题?
例如,我将所有功能和 classes 处理 SDL 内容(跨平台窗口 api)拆分到它自己的 CommonsSDL.lib
项目中,但一些 classes 尤其像 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 信息中,无法扩展 class 定义。无论如何,并非没有写一些可能会严重影响 Color 行为的东西。
禁止扩展,是否可以用 CommonsSDL.lib
中的 Color
的定义代替 CommonsCore.lib
中的 Color
的定义?如果有必要,我不介意复制他们共享的代码,但还没有找到关于这种可能性的任何信息。
我也尝试了一些预处理器的废话,但是,我开始意识到这可能是不可能的,因为 .lib 已经编译了。
如果别无选择,我将不得不接受它并切出耦合方法。有 31 个 classes 存在与 Color 类似的小而烦人的耦合问题,修复它们会改变它们在大约 20 个项目中的界面,所以我在黑暗中寻找一种避免需要这样做的方法......当然,既然如此,那就这样吧。
Barring extension, would it be possible to instead supplant the definition of Color in CommonsCore.lib with the definition of Color in CommonsSDL.lib?
您可以更改 CommonsCore.lib
的源以使用 Color 的新定义并重新编译库。除此之外,不,这是不可能的。该更改将导致 CommonsCore.lib 依赖于 SDL。
我有一个 Commons.lib
项目,我在其中粘贴了很多重复使用的代码,但它已经变得太大了(破坏其中的解析器会停止 20 个不相关项目的工作,诸如此类) ).我将它拆分是为了更好地隔离它的组件,但是 运行 分成许多小的......我猜是“耦合”问题?
例如,我将所有功能和 classes 处理 SDL 内容(跨平台窗口 api)拆分到它自己的 CommonsSDL.lib
项目中,但一些 classes 尤其像 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 信息中,无法扩展 class 定义。无论如何,并非没有写一些可能会严重影响 Color 行为的东西。
禁止扩展,是否可以用 CommonsSDL.lib
中的 Color
的定义代替 CommonsCore.lib
中的 Color
的定义?如果有必要,我不介意复制他们共享的代码,但还没有找到关于这种可能性的任何信息。
我也尝试了一些预处理器的废话,但是,我开始意识到这可能是不可能的,因为 .lib 已经编译了。
如果别无选择,我将不得不接受它并切出耦合方法。有 31 个 classes 存在与 Color 类似的小而烦人的耦合问题,修复它们会改变它们在大约 20 个项目中的界面,所以我在黑暗中寻找一种避免需要这样做的方法......当然,既然如此,那就这样吧。
Barring extension, would it be possible to instead supplant the definition of Color in CommonsCore.lib with the definition of Color in CommonsSDL.lib?
您可以更改 CommonsCore.lib
的源以使用 Color 的新定义并重新编译库。除此之外,不,这是不可能的。该更改将导致 CommonsCore.lib 依赖于 SDL。