Скрытие личных данных?(С++)
Вопрос
Есть ли способ скрыть члены частных данных класса C++ от пользователей в файле cpp?Я считаю закрытые члены частью реализации, и объявлять их в заголовочном файле кажется несколько неправильным.
Решение
Идиома «прыщ» — это то, как обычно это делается.
Видеть
- http://www.gotw.ca/gotw/024.htm
- http://www.gotw.ca/gotw/028.htm
- http://herbsutter.com/gotw/_100/ (обновлено для C++11)
Другие советы
вы хотите использовать что-то вроде идиомы PIMPL
Видеть Идиома прыща
Классический способ сделать это — использовать прокси-указатель на внутренний класс, реализующий эту функциональность.Насколько мне известно, в C++ невозможно создать частичные определения классов.
Займетесь коммерцией?;)
Вы можете создавать файлы заголовков, в которых объявляете только общедоступный и защищенный API.
Пользователю предоставляются только те, которые он может включить.Они связывают свой код с библиотекой, которую вы создали, используя полный API и определения.
Для встроенных функций:убедитесь, что они используются в невстроенном коде, тогда в библиотеке будет доступно определение (однако я не уверен, что оно будет встроено в пользовательскую реализацию).
Для шаблонного кода другого пути нет.Одним из половинчатых решений является создание кода, который использует шаблонный код с различными типами объектов.Пользователь будет ограничен этими определениями, поскольку это единственные определения, доступные в вашей библиотеке.