Упрощая мою проблему, мы можем рассмотреть:
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!
};
Почему мы не можем написать пару типов * p?Я не понимаю причины наследования ::!это делает код более сложным и плохим для чтения!
PS (конечно, публично. как я говорю "упрощаю мою проблему ...")
typedef typename Base<T>::pair pair;
На мой взгляд, это... русское слово, которое трудно перевести ("костыль")
Это похоже на Kludge или клейкую ленту или хак =)
Как я понимаю:
typedefs наследуют как обычную функцию или переменную.но это не доступно (!!!).чтобы получить доступ к нему, мы должны написать
typedef typename Base<T>::pair pair;
или
typedef typename Inheritor<T>::pair pair;
это выглядит смешно индуистский код но нам это нужно!(> _ <) '' '' </p>
курса в открытом доступе