J'ai un modèle de classe qui contient deux fonctions membres similaires:Comment faire pour résoudre ce problème avec const-haut niveau?
template<class T>
class MyTemplate {
// other stuff, then
static T* member(T&); //line 100
static const T* member(const T&); //line 101
};
que j'instancier comme ceci:
MyTemplate<int* const>
et Visual C++ 9 se plaint:
mytemplate.h(101) : error C2535: 'int* MyTemplate<T>::member(T &)' :
member function already defined or declared
with
[
T=int *const
]
mytemplate.h(100) : see declaration of 'MyTemplate::member'
with
[
T=int *const
]
somefile.cpp(line) : see reference to class template instantiation
'MyTemplate<T>' being compiled
with
[
T=int *const
]
Je certainement besoin des deux versions de member()
- une pour référence const et une pour référence non const . Je suppose que le problème a quelque chose avec les qualificatifs const de haut niveau, mais je ne peux pas en déduire comment le résoudre.
Comment puis-je résoudre ce problème afin que j'ai toujours deux versions de member()
et le modèle compile?
Je préfère préfère avoir seulement la version const quand 'T' est const. Est-ce possible? – sharptooth
@sharptooth Bien sûr, supprimez la version non const de 'member' dans la spécialisation partielle. – fefe
Mon modèle est en réalité une centaine de membres - l'idée de spécialisation partielle ne semble pas cool. – sharptooth