Bonjour!

Tout d'abord, le code:
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;
};
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?

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!