Comment écrire le corps destructeur hors-ligne, pour une classe de modèle avec un argument std :: enable_if?définition hors ligne pour destructeur dans la classe enabled-if?
(J'ai besoin de ceci pour écrire un décorateur, en ajoutant un identifiant à d'autres types d'objets).
code:
template<typename T,
typename std::enable_if<std::is_base_of<X,T>::value>::type* = nullptr>
class IdentifiedInstance: public T
{
public:
virtual ~IdentifiedInstance() = 0; // abstract base, still needs a function body
};
définition du corps:
template<typename T,
typename std::enable_if<std::is_base_of<X,T>::value>::type* = nullptr>
IdentifiedInstance::~IdentifiedInstance()
{
}
Cela ne compile pas parce IdentifiedInstance::
devrait être IdentifiedInstance<T, ???>::
.
Quelle est la deuxième valeur de paramètre ici? Comment écrire correctement ceci?
Notes (1):
Visual Studio 2015 accepte cette forme:
template<typename T,
typename std::enable_if<std::is_base_of<X,T>::value>::type* = nullptr>
class IdentifiedInstance: public T
{
public:
~IdentifiedInstance() = 0
{
}
};
Malheureusement le code que j'écris doit être construit aussi sous linux (et gcc selfs à juste titre sur ce formulaire).
Notes (2): J'ai essayé de le rechercher en ligne, mais la plupart des réponses que j'ai trouvées concernaient la spécialisation partielle du destructeur.