2008-10-15 3 views
32

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

ответ

52

Идиома «pimpl» - это то, как это обычно обрабатывается.

См

+0

Спасибо, сейчас работает. Эти две статьи хорошо объясняют идиому. – jeffythedragonslayer 2008-10-15 20:51:28

+0

Имеет ли это влияние на производительность? – jjxtra 2013-01-31 17:24:48

4

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

1

Going коммерческий? ;)

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

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

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

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

Смежные вопросы