simplificatrices Héritier mon problème, nous pouvons considérer:g ++ typedef modèles en classe
template <class T>
class Base{
typedef typename std::pair<T, T> pair;
};
template <class T>
class Inheritor : public Base<T> {
pair *p;
// mean that we want to use constructor of std::pair.
// say: std::pair withou argument list
Inheritor<T>::pair *p;
// dont see his typename
// say: pair does not name a type
typename pair *p;
// I was sure that it works.
// I dont know why it doesnt work.
// say: expected nested-name-specifier before 'pair
typename Inheritor<T>::pair *p;
// ok!
};
pourquoi nous ne pouvons pas écrire typename paire * p? Je ne comprends pas les raisons de Inheritor ::! ça rend le code plus complexe et mauvais à lire!
PS (du public cource. Ce que je dis "simplifier mon problème ...")
typedef typename Base<T>::pair pair;
Dans mon esprit, il est un ... russe mot qui est difficile à traduire ("костыль")
ressembler bidouille ou du ruban adhésif ou pirater =)
Si je comprends bien:
typedefs hériteront comme d'habitude fonction ou variable. mais ce n'est pas accessible (!!!). à Acess il nous faut écrire
typedef typename Base<T>::pair pair;
ou
typedef typename Inheritor<T>::pair pair;
il ressemble drôle Hindu code mais nous en a besoin! (> _ <) « » « »
Evidement, portée publique