Qu'est-ce qu'une portée dépendante et quelle est la signification de typename dans le contexte de l'erreur suivante?Modèles imbriqués avec portée dépendante
$ make
g++ -std=gnu++0x main.cpp
main.cpp:18:10: error: need 'typename' before 'ptrModel<std::vector<Data> >::Type' because 'ptrModel<std::vector<Data> >' is a dependent scope
make: *** [all] Error 1
/*
* main.cpp
*/
#include <vector>
#include <memory>
template<typename T>
struct ptrModel
{
typedef std::unique_ptr<T> Type;
};
template<typename Data>
struct ptrType
{
typedef ptrModel< std::vector<Data> >::Type Type;
};
int main()
{
return 0;
}
D'accord, mais n'est-il pas vrai que typedef une variable membre n'a pas de sens? – user383352
Oui, mais cela n'est pas forcément utile en raison de certains détails sur la façon dont les modèles sont analysés par le compilateur. Voir la réponse acceptée à cette question: http://stackoverflow.com/questions/642229/why-do-i-need-to-use-typedef-typename-in-g-but-not-vs –
J'ai aussi trouvé [ cette réponse] (http://stackoverflow.com/a/6571836/24874) pour être très utile lorsque vous rencontrez cette erreur et le concept pour la première fois. –