Предварительное описание методов
osheter opened this issue · 7 comments
Разрешить предварительное описание методов, не описывая весь класс.
Использовать вместо pimpl.
// h-файл
class foo;
int foo::bar() const;
// cpp-файл
class foo
{
public:
int bar() const { return 0; }
};
Использовать вместо pimpl.
И отказаться от возможности использовать конструкторы и деструкторы ?
Для Вашего класса компилятор, согласно стандарта, обязан сгенерировать деструктор, если оригинальный недоступен в области видимости(Что достаточно странно и абсурдно для многих, и приводит к частым ошибкам в программах в виде утечек ресурсов и дэдлоков и прочее). Подробности тут: #476. Конкретно для вашего случая pimpl будет утечка ресурсов. Если же деструктор будет видимым, то это уже совсем не Pimpl.
Тем не менее существуют ситуации, когда внутреннее устройство класса, его поля и т.п. не требуется для его использования. В таких случаях для пользователя достаточно видеть только указатель/ссылку и публичные методы.
У линкера ( в сигнатуре метода ) нет информации о том публичный метод или не публичный.
Также поломается несколько других функций языка с++.
Возникает проблема с overloads. Например, есть внешнее определение void foo::bar(int), а в классе есть void bar(long). Вызываем m_foo->bar(1L), и выбор конкретного метода оказывается зависимым от того, видим мы класс или нет.
Кроме того, сама эта проблема (отвязывание использования класса от его деталей реализации), если я правильно понимаю, может/должна решаться сама собой при использовании модулей.