[Template] Spécialisation partielle d'un template
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:
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:
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 ?