Я хочу избежать перекомпиляции всего, что включает в себя общедоступный заголовочный файл, только потому, что что-то изменилось в частной части определения класса. Я изучаю другие варианты рядом с PIMPL.partial class in C++
Это то, что я пробовал:
Я создал библиотеку, которая содержит класс А:
A_p.h содержит приватную часть класса А
void PrivateMethod(int i);
Ах общедоступный заголовочный файл:
class A
{
public:
A();
virtual ~A();
// other public members
private:
#ifdef A_PRIVATE
#include "A_p.h"
#endif
};
a.cpp
#define A_PRIVATE
#include "A.h"
A::A() {}
A::~A() {}
void A::PrivateMethod(int i) { }
Затем я создал консольный проект Win32, который включает в себя публичный заголовок (хиджры) и ссылки против файла .lib.
Все, кажется, работает, но я задаюсь вопросом о любых подводных камнях по пути. Может ли кто-нибудь уточнить это?
«Я читал о Pimpl, но я искал способ, чтобы избежать этого.» Зачем? –
Вы нарушаете ODR и вызываете UB. – PlasmaHH
Итак, что произойдет, если вы измените частную часть? – juanchopanza