Нет, вы не можете этого сделать.Вы должны заранее объявить класс Pimpl:
class MyCalculatorImplementation;
, и это объявит класс.Если вы затем поместите определение в безымянное пространство имен, вы создаете другой класс (anonymous namespace)::MyCalculatorImplementation
, который не имеет ничего общего с ::MyCalculatorImplementation
.
Если это было любое другое пространство имен NS
, вы можете изменитьforward-декларация для включения пространства имен:
namespace NS {
class MyCalculatorImplementation;
}
, но безымянное пространство имен, как бы оно ни было волшебным, преобразуется во что-то другое, когда этот заголовок включен в другие единицы перевода (вы бы объявилиновый класс всякий раз, когда вы включаете этот заголовок в другой модуль перевода).
Но здесь использование анонимного пространства имен не требуется: объявление класса может быть открытым, но определение, находящееся в файле реализации, видимо толькокод в файле реализации.