Bonjour!
Tout d'abord, le code:
Ce code fonctionne très bien sur un compilateur supportant les variadic templates, cependant j'aimerais savoir s'il y a possibilité de reproduire ce comportement avec un compilateur ne supportant pas les variadic templates, en gros, que puis-je mettre dans le #else?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 template< class Obj, class Key, typename Creator > class Factory { protected: typedef std::shared_ptr< Obj > ObjPtr; typedef std::map< Key, Creator > ObjMap; public: Factory() {} virtual ~Factory() {} void Register( Key const & p_key, Creator p_creator ) { m_registered.insert( std::make_pair( p_key, p_creator ) ); } #if HAS_VARIADIC_TEMPLATES template< typename ... Parameters > ObjPtr Create( Key const & p_key, Parameters && ... p_params ) { ObjPtr l_return; typename ObjMap::iterator l_it = m_registered.find( p_key ); if ( l_it != m_registered.end() ) { l_return = l_it->second( p_params... ); } return l_return; } #else #endif protected: ObjMap m_registered; };
J'ai essayé avec une bidouille de fonctions activées via les std::enable_if, en créant une structure template permettant de déduire le nombre de paramètres que prend la fonction de création, mais sans succès.
Quelqu'un a-t-il une idée?
Merci d'avance!
Partager