Обратиться к псевдониму типа в определении метода вне класса

92
21 апреля 2021, 02:10

Составил небольшой пример. Компилятор не может найти тип ref как возвращаемое значение метода getA() . Почему это происходит? И как тогда лучше писать? Спасибо.

template<class T>
class A
{
    T a;
public:
    using ref = const T&;
    ref getA()const;
};
template<class T>
A<T>::ref A<T>::getA() const
{
    return a;
}
Answer 1

В данном случае без указания typename компилятор воспринимает зависимое имя ref не как имя типа. Однако использовать typename в данном случае совсем не обязательно, так как это имя может быть найдено в контексте этого класса. Проще и короче будет использовать хвостовой синтаксис для возвращаемого значения, это также позволит избавиться от A<T>::.

template<class T>
class A
{
    T a;
public:
    using ref = const T&;
    ref getA()const;
};
template<class T> auto
A<T>::getA() const -> ref
{
    return a;
}
READ ALSO
Специализация шаблонов и общий код

Специализация шаблонов и общий код

При специализации шаблона под конкретный тип, общий класс используется на ура, а специализация, использующая то же определение метода, что...

87
Проблема с записью в массив Jquery [закрыт]

Проблема с записью в массив Jquery [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

108
Как скрыть тег html таблицы по itemprop

Как скрыть тег html таблицы по itemprop

Как можно скрыть первую строку в таблице, если таблица для товара создается автоматически в админкеПробовал через js (сам новичок в этом),...

108
Как проверить открыто ли окно в WPF?

Как проверить открыто ли окно в WPF?

Как проверить открыто ли окно в WPF? Когда окно открыто, то при нажатии на кнопу открывается новое окноКак предотвратить это?

122