Pimpl являются источником стандартного кода на C ++. Они кажутся такими вещами, которые может решить комбинация макросов, шаблонов и, возможно, небольшая помощь со стороны внешнего инструмента, но я не уверен, каким будет самый простой способ. Я видел шаблоны , которые помогают выполнять некоторые действия, но не очень - вам все равно придется писать функции пересылки для каждого метода класса, который вы пытаетесь обернуть. Есть ли более простой способ?
Я представляю себе инструмент, используемый как часть процесса создания. Вы хотите, чтобы ваши публичные заголовки были классами pimpl'd, поэтому вы предоставляете некоторый входной файл, скажем pimpl.in, в котором перечислены классы (реализованные un-pimpl'd), которые вы хотите обернуть, затем этот файл проверяется, классы pimpl генерируются и только их заголовки (не заголовки исходного класса) устанавливаются во время 'make install'. Проблема в том, что я не вижу способа сделать это без полноценного синтаксического анализатора C ++, что даже поставщики компиляторов не могут сделать правильно. Может быть, классы могли бы быть написаны так или иначе, что упростит работу внешнего инструмента, но я уверен, что в конечном итоге я пропущу все виды угловых случаев (например, шаблонные классы и / или шаблонные функции-члены).
Есть идеи? Кто-нибудь еще пришел с решением этой проблемы уже?