Я знаю, что это поздний пост, но друг только что задал мне похожий вопрос, поэтому я решил опубликовать наше обсуждение:
Из того, что я понимаю, вы хотите сделать ThinkingStiff, это невозможно вC ++.Я так понимаю, вы хотите что-то вроде «частичного класса» в C #.
Имейте в виду, «частичный класс» в .NET необходим, поэтому вам не нужно помещать всю реализацию в один большой исходный файл.В отличие от C ++, .NET не позволяет отделить реализацию от объявления, поэтому необходим «частичный класс».Итак, Rafid это не приятная особенность, это необходимая вещь и переосмысление колеса IMHO.
Если ваше определение класса настолько велико, вам нужно разделить его на несколько исходных файлов, тогда он можетвероятно, можно разделить на более мелкие разделенные классы, и основной класс может использовать шаблон проектирования посредника , который связывает их все вместе.
Если вы хотите скрыть частные члены, например, при разработкекоммерческая библиотека, и вы не хотите отдавать интеллектуальную собственность (или намеки на это), тогда вы можете использовать чисто абстрактные классы .Таким образом, все, что находится в заголовке, это простой класс со всеми общедоступными определениями (API) и фабричной функцией для создания его экземпляра.Все подробности реализации находятся в ваших исходных файлах.
Другая альтернатива похожа на вышеприведенную, но использует обычный класс (не чисто виртуальный), но по-прежнему предоставляет только открытый интерфейс.В ваших исходных файлах вы выполняете всю работу внутри безымянного пространства имен , которое может включать функции friend из определения вашего класса, когда это необходимо, и т. Д. Немного больше работы, норазумная техника.
Я выделен теми вещами, которые вы, возможно, захотите найти и учесть при решении своей проблемы.