Szukam dobrego zasobu do nauki o dobrym projektowaniu API dla bibliotek C ++, przeglądaniu współdzielonych obiektów / bibliotek dll itp. Istnieje wiele zasobów na temat pisania fajnych API, ładnych klas, szablonów itp. Na poziomie źródła, ale prawie nic o łączenie rzeczy we wspólnych bibliotekach i plikach wykonywalnych. Książki takie jak Large-Scale C ++ Software Design autorstwa John Lakos są interesujące, ale bardzo przestarzałe.
To, czego szukam, to porady dotyczące obsługi szablonów. Dzięki szablonom w moim interfejsie API często kończę na kodzie biblioteki w pliku wykonywalnym (lub innej bibliotece), więc jeśli naprawię tam błąd, nie mogę po prostu uruchomić nowej biblioteki, ale muszę ponownie skompilować i rozprowadzić wszystkich klientów tego kodu. (i tak, znam niektóre rozwiązania, takie jak próba utworzenia przynajmniej najpopularniejszych wersji w bibliotece itp.)
Szukam również innych zastrzeżeń i rzeczy do zapamiętania dla zachowania zgodności binarnej podczas pracy z bibliotekami C ++.
Czy istnieje dobra strona internetowa lub książka na takie tematy?
źródło
std::unique_ptr
to całkiem nowe rzeczy. Co Twoim zdaniem było bardziej odpowiednie w proponowanym interfejsie API? Sposób, w jaki musiałeś ręcznie zarządzać wszystkimi zasobami, na przykład praktycznie gwarantując wycieki i podwójne usuwanie? Lub sposób, w jaki wielu twoich typów miało jedną lub dwie litery, uniemożliwiając określenie ich celu?unique_ptr
, nie byłoby możliwe napisanie takiego kodu.Odpowiedzi:
W rzeczywistości istnieje książka, której dokładnie szukasz. Jest to odpowiednio wywołanie API Design dla C ++. Witryna książki zawiera kod źródłowy książki oraz Errata .
źródło
To jest prawie niemożliwe. Prostym faktem jest to, że czasami potrzebujesz kompilatora do wykonania pracy i nie możesz po prostu zrzucić tej konieczności. Nie ma funkcji, która nie mogłaby tworzyć
std::vector
biblioteki tylko nagłówków. Kompilator może sprawić, że wiele magii zadziała, ale nie możesz ich mieć bez inwokacji, a to fakt.Oto, co możesz zrobić: nie używaj szablonów tam, gdzie ich nie potrzebujesz. Oto, czego nie możesz zrobić: nic innego.
Prostym faktem jest to, że rekompilacja z nową wersją nie jest tak naprawdę dużym obciążeniem w porównaniu z zaletami wydajności, bezpieczeństwa i funkcjonalności, które można uzyskać dzięki bibliotekom o typie statycznym.
źródło