Bonjour, je suis en train d'essayer de faire une spécialisation partielle d'un constructeur: je veux qu'il puisse être défini dans le template pour être d'un type ou de void.

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
 
namespace kage
{
	//!     \template       InstanceOf
	//!     @brief          instance of a definition
	template< class _Self, class _Definition, class _Base = KAGE_EMPTY<_Self>, typename _Param = void, class _DefPtr = KAGE_WP(_Definition) >
	class	InstanceOf : public _Base
	{
		_DefPtr		_definition;
	public:
		friend class _Definition;
		_DefPtr		getDefinition()		{	return _definition;	}
	protected:
		InstanceOf(_Param p);
	public:
		virtual ~InstanceOf()	{}
	};
 
} //namespace kage
Voilà, pour le constructeur, je dois appeler le constructeur parent, qui lui peut ou ne pas avoir un paramètre. Evidemment, un paramètre void nommé, ca ne fonctionne pas, donc je dois spécialiser le template pour accepter aussi les paramètres void.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
template< class _Self, class _Definition, class _Base, typename _Param, class _DefPtr >
kage::InstanceOf< _Self, _Definition, _Base, _Param, _DefPtr>::InstanceOf(_Param p) :
	_Base(p)			
	{
	}
 
template< class _Self, class _Definition, class _Base, class _DefPtr >
kage::InstanceOf< _Self, _Definition, _Base, void, _DefPtr>::InstanceOf(void) :
	_Base()			
	{
	}
Autant dire que si je poste ca ici, c'est que ca ne fonctionne pas. D'où mes questions: est-ce que ce que je veux faire est possible? si oui, quelle serait la syntaxe ou la facon correcte de s'y prendre? Sinon, ben quelles autres solutions y-a-t'il ?