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