Dwa przykłady bibliotek korzystających z nowoczesnych konstrukcji C ++:
- Zarówno biblioteka własna, jak i pancernik (algebra liniowa) używają kilku nowoczesnych konstrukcji C ++. Na przykład używają obu szablonów wyrażeń, aby uprościć wyrażenia arytmetyczne, a czasem mogą wyeliminować niektóre elementy tymczasowe:
http://eigen.tuxfamily.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (prezentacja na szablonach wyrażeń w Armadillo)
- Biblioteka CGAL (geometria obliczeniowa) wykorzystuje wiele nowoczesnych funkcji C ++ (intensywnie wykorzystuje szablony i specjalizacje):
http://www.cgal.org
Uwaga:
nowoczesne konstrukcje C ++ są bardzo eleganckie i mogą być bardzo przyjemne w użyciu. Jest to zarówno mocna strona, jak i słabość: przy ich użyciu tak kuszące jest dodanie kilku warstw szablonów / specjalizacji / lambdas, że w końcu czasem uzyskuje się więcej „administracji” niż skutecznego kodu w programie (innymi słowy, Twój program „mówi” więcej o problemie niż opisuje rozwiązanie). Znalezienie właściwej równowagi jest bardzo subtelne. Wniosek: należy śledzić ewolucję stosunku „sygnał / szum” w kodzie, mierząc :
- ile wierszy kodu w programie?
- ile klas / szablonów?
- czas pracy?
- zużycie pamięci?
Wszystko, co zwiększa pierwsze dwa, może być uważane za koszt (ponieważ może utrudniać zrozumienie i utrzymanie programu), wszystko, co zmniejsza ostatnie dwa, jest zyskiem .
Na przykład wprowadzenie abstrakcji (klasa wirtualna lub szablon) może uwzględniać kod i uprościć program ( wzmocnienie ), ale jeśli nigdy nie zostanie on wyprowadzony / wystąpi tylko raz, wówczas wprowadza koszt braku powiązanego zysku (ponownie jest to subtelne, ponieważ zysk może przyjść później w przyszłej ewolucji programu, dlatego nie ma „złotej reguły”).
Wygoda programisty jest również ważnym czynnikiem, który należy wziąć pod uwagę w bilansie kosztów i zysków: przy zbyt wielu szablonach czas kompilacji może znacznie wzrosnąć, a komunikaty o błędach stają się trudne do przeanalizowania.
Zobacz też
W jakim stopniu ogólne i metaprogramowanie przy użyciu szablonów C ++ jest przydatne w informatyce?