В API существует ли какое-то преимущество использования типа void *
в качестве дескриптора структур, возвращаемых пользователю (в отличие от использования типа name_of_the_structure *
и просто скрытия реализации)?Скрытие внутренних элементов структуры
ответ
Если вы используете void*
, тогда содержимое является полностью черным ящиком, о котором пользователь ничего не знает. Однако вы также потеряете некоторую безопасность типов, так как пользователь вашего API может передать любой указатель на вашу функцию, и у вас нет простого способа определить, является ли он правильным указателем или нет.
К счастью, вы на самом деле не имеете, чтобы полностью скрыть структуру. Вы просто общедоступный заголовок, который распространяется с API, который декларирует структуру, как
struct my_special_struct;
Тогда ваши функции по-прежнему могут быть объявлены с использованием указателей на эту структуру, и пользователь тоже, но пользователь имеет для использования ваших функций создайте фактические экземпляры, и пользователь также не сможет использовать вашу структуру для доступа к внутренним полям или получения их размера с помощью sizeof
.
Вот что я имел в виду под «скрытием реализации». – user2656304
@ user2656304 Хорошо, тогда нет никакого преимущества использования 'void *'. –
- 1. Скрытие/скрытие внутренних макетов в Android
- 2. скрытие внутренних символов в библиотеке
- 3. C - Скрытие реализации структуры
- 4. Отображение элементов внутренних форм
- 5. Thymeleaf: обработка внутренних элементов
- 6. Анимация внутренних элементов панорамы
- 7. Размер внутренних элементов ячеек
- 8. Вертикальное выравнивание внутренних элементов
- 9. скрытие внутренних таблиц с помощью JQuery
- 10. Скрытие внутренних классов. Что мне не хватает?
- 11. головоломка на внутренних классов и класса Скрытие
- 12. Скрытие элементов заголовка в jQuery
- 13. Скрытие и скрытие Список элементов JavaScript/HTML
- 14. Функция друга шаблонной структуры с типами аргументов в зависимости от внутренних элементов структуры
- 15. Скрытие элементов с JS
- 16. Скрытие элементов на диаграмме
- 17. jQuery: Скрытие скрытых элементов
- 18. Отображение/скрытие элементов - listview
- 19. Скрытие элементов в таблице
- 20. Скрытие элементов из UIWebView
- 21. Скрытие элементов в XAML
- 22. Как найти ширину внутренних элементов
- 23. JavaFX- масштабирование внутренних элементов панели
- 24. Предотвращение разрыва внутренних элементов столбца
- 25. Извлечение внутренних элементов в java
- 26. Скрытие элементов с помощью CSS
- 27. Скрытие выходных элементов с ServiceStack
- 28. Скрытие элементов с 3D преобразует
- 29. Форма проверки Javascript скрытие элементов
- 30. Отображение/скрытие элементов ajax Drupal
Я не думаю, что это имеет какое-либо преимущество (если вы не пытаетесь взломать «полиморфные» структуры, как я часто это делаю). Это снижает безопасность типа. –