Например, я отделил все функции и классы, обрабатывающие SDL. контент (кросс-платформенный оконный API) в собственный проект CommonsSDL.lib, но некоторые классы, в частности, такие как класс 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;
};
Без расширения можно было бы вместо этого заменить определение Color в CommonsCore.lib< /code> с определением цвета в CommonsSDL.lib? Я был бы не против дублировать общий код, если это необходимо, но не нашел никакой информации об этой возможности.
Я тоже пробовал какую-то ерунду с препроцессором, но пришел к выводу, что понимаю, что это может оказаться невозможным, поскольку .lib уже скомпилированы.
Если альтернативы нет, мне просто придется смириться с этим и вырезать связанные методы. Есть 31 класс с небольшими, но раздражающими проблемами сцепления, похожими на Color, и их исправление меняет их интерфейсы примерно в 20 проектах, поэтому я в темноте ищу способ избежать необходимости делать это... конечно, если это так это так, вот так.
Подробнее здесь: https://stackoverflow.com/questions/684 ... rom-anothe