Скрытие личных данных участников? (C ++) - PullRequest
35 голосов
/ 16 октября 2008

Есть ли способ скрыть личные данные членов класса C ++ от его пользователей в файле cpp? Я думаю о закрытых членах как о части реализации, и кажется немного отсталым объявить их в заголовочном файле.

Ответы [ 5 ]

57 голосов
/ 16 октября 2008

Идиома "pimpl" - это то, как это обычно делается.

См

8 голосов
/ 16 октября 2008

вы хотите использовать что-то вроде идиома PIMPL

http://en.wikipedia.org/wiki/Opaque_pointer

8 голосов
/ 16 октября 2008
4 голосов
/ 16 октября 2008

Классический способ сделать это с помощью прокси-указателя на внутренний класс, который реализует функциональность. Нет никакого способа сделать частичные определения классов в C ++, о которых я знаю.

1 голос
/ 25 января 2010

Идет коммерция? ;)

Вы можете создавать заголовочные файлы, в которых вы объявляете только открытый и защищенный API.

Пользователь представлен только с этими, которые они могут включать. Они связывают свой код с библиотекой, которую вы создали, используя полный API и определения.

Для встроенных функций: убедитесь, что они используются в не встроенном коде, тогда в библиотеке будет доступно определение (однако я не уверен, что оно будет встроено в пользовательскую реализацию).

Для шаблонного кода реального пути нет. Одно нерешительное решение - создать код, который использует шаблонный код с различными типами объектов. Пользователь будет ограничен этим, потому что это единственные определения, доступные в вашей библиотеке.

...