Factory générique avec/sans variadic templates
Bonjour!
Tout d'abord, le code:
Code:
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!