Я ищу хороший ресурс для изучения хорошего дизайна API для библиотек C ++, просмотра общих объектов / библиотек и т. Д. Есть много ресурсов по написанию хороших API, хороших классов, шаблонов и так далее на уровне исходного кода, но почти ничего о собирать вещи в общие библиотеки и исполняемые файлы. Такие книги, как Large-Scale C ++ Software Design от Джона Лакоса, интересны, но сильно устарели.
То, что я ищу, это совет, то есть по обработке шаблонов. С шаблонами в моем API я часто получаю библиотечный код в своем исполняемом файле (или другой библиотеке), поэтому, если я исправлю там ошибку, я не смогу просто развернуть новую библиотеку, но придется перекомпилировать и перераспределить всех клиентов этого кода. (и да, я знаю некоторые решения, такие как попытка создания экземпляров хотя бы самых распространенных версий в библиотеке и т. д.)
Я также ищу другие предостережения и вещи для сохранения двоичной совместимости при работе с библиотеками C ++.
Есть ли хороший сайт или книга о таких вещах?
источник
std::unique_ptr
это довольно новый материал. Что именно, по вашему мнению, больше подходит для предложенного вами API? Например, каким образом вам пришлось вручную управлять всеми ресурсами, фактически гарантируя утечки и двойное удаление? Или то, как многие из ваших типов имели одно-или двухбуквенные имена, делая невозможным гадание их цели?unique_ptr
было бы невозможно написать такой код.Ответы:
На самом деле есть книга, которая именно то, что вы ищете. Это вызов, достаточно уместно, API Design для C ++. На веб-сайте книги есть исходный код книги, а также исправления .
источник
Это почти невозможно. Простой факт заключается в том, что иногда вам нужен компилятор для выполнения работы, и вы не можете просто устранить эту необходимость. Нет функции, которая могла бы сделать
std::vector
библиотеку не только заголовком. Компилятор может заставить работать много магии, но вы не можете получить их, не вызывая их, и это факт жизни.Вот что вы можете сделать: не используйте шаблоны там, где они вам не нужны. Вот что вы не можете сделать: что-нибудь еще.
Простой факт заключается в том, что перекомпиляция с новой версией на самом деле не такая уж большая нагрузка по сравнению с преимуществами производительности, безопасности и функциональности, которые вы можете получить с помощью статически типизированных библиотек.
источник