Используйте typedef / using из шаблонного базового класса в производном классе
В доступе кusing
из базового класса с шаблонным базовым классом я столкнулся с проблемой многословия, если ничего больше. В приведенном ниже коде производный класс пытается использоватьmy_type
из своего базового класса.
template <typename T>
class Base {
public:
using mytype = T;
};
template <typename T>
class Derived : public Base<T>{
public:
// using the base's mytype here
static typename Base<T>::mytype func() { return 0;}
};
Однако на практике я нахожу, что это ужасно много символов для того, что кажется более простым. если базовый класс не был шаблонизирован, то он не потребовал бы<T> или имя типа (очевидно).
В моей реальной проблеме, у меня есть много классов, основанных на базе, и я хочу упростить это, если это возможно. То, что у меня есть на данный момент, похоже на следующий пример, где я просто добавляю дополнительныйusing
чтобы получить тип из базового класса, но мне кажется, что дополнительный слой мне не нужен.
template <typename T>
class Derived : public Base<T>{
public:
using base_type = typename Base<T>::mytype;
static base_type func() { return 0;}
};
это может показаться глупой проблемой, но сколько раз базовый классmytype
используется в производных классах, что делает его довольно отвратительным в первом случае. Есть липравильно способ получить типы из шаблонной базы, которая поддерживает читабельность?