Grazie a tutti e due per aver risposto (l' articolo è stato veramente interessante).
Ho provato a far diventare alcune classi della libreria dei template e in effetti il codice risultante era poco comprensibile e se come dice MItaly i benefici non sono poi così elevati mi rendo conto che in questo caso i template non sono adatti alla situazione.
In questo modo però si riduce (e di molto) la mia stima nei confronti dei template in C++. Infatti l' unico utilizzo, a parte la tecnica del metaprogramming, che riesco a trovare è quello di creare wrapper o collezioni che non hanno bisogno di conoscere l' interfaccia, o almeno gran parte, dei tipi a cui vengono applicate, ma solo delle sue "proprietà" (se è DefaultConstructible, etc...) . Corretto?
Inoltre nella libreria vi è anche codice di questo tipo:
Il fatto è che _string_list in derived dovrebbe chiamarsi in un' altra maniera per lo scopo, ma di fatto utilizza il nome dei metodi della classe base. Tutto ciò è buona norma o invece, come penso io, complica la comprensione del codice?codice:struct base { std::list<std::string> string_list() const; private: std::list<std::string> _string_list; }; struct derived : base { }
Essenzialmente base esiste perché ci sono più classi che hanno come attributo quel tipo di lista e quindi per evitare codice duplicato hanno deciso di creare questa classe padre con gli attributi comuni.

Rispondi quotando