Généralement, j'essaye d'éviter le plus possible les DP politiques :
- On ne va pas avoir la notion que ModuleFileSystemA, ModuleFileSystemBDD sont des ModuleFileSystem ;
- Au niveau de l'implémentation d'un ModuleFileSystem, c'est moins "direct" ;
- Je suis obligé de mettre ModuleManager en header-only ;
- Si je veux choisir (ou créer) le ModuleFileSystem au sein d'une fonction avant de créer le ModuleManager, ce ne sera pas possible :
ModuleManager<A,B,C, ?> m(A(), B(), C(), chooseD() );
- De plus, est-ce que ModuleManager a vraiment à connaître le type exact de ModuleFileSystem ? Si je template ModuleFileSystem pour choisir le container interne à utiliser, cela me parait pas super de devoir faire :
ModuleManager<A,B,C, ModuleFileSystemT<std::vector>>(...)
J'ai l'impression de briser d'une certaine manière l'encapsulation.
Et parfois y'a des choses bizarres :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <iostream>
template <typename T>
class U
{
public :
U(const T & t)
{
std::cerr << "o" << std::endl;
t.foo();
}
};
class K{};
int main(void)
{
//U<int>(45);
std::cerr << "!" << std::endl;
U<K> t( K() );
std::cerr << "?" << std::endl;
} |
Affiche :
Partager