Как при помощи using объявить тип-член внутри шаблонного класса?
Рассмотрим следующий код:
class A
{
public:
using Uptr = std::unique_ptr<A>;
};
class B
{
public:
A::Uptr a;
};
Это классический подход снабдить тип дополнительным подтипом-членом для удобства работы.
Когда я пытаюсь реализовать это для шаблонных A и B, компилятор говорит мне, что я сильно неправ:
template <typename T>
class A
{
public:
using Uptr = std::unique_ptr<A<T>>;
};
template <typename T>
class B
{
public:
A<T>::Uptr a;// Error
};
Скажите, почему так происходит, и что с этим можно сделать?
Ответы (1 шт):
Автор решения: user393643
→ Ссылка
Надо указать typename, потому что компилятор не знает, что A<T>::Uptr это тип, а не член класса.
#include <memory>
#include <iostream>
template <typename T>
class A
{
public:
using Uptr = std::unique_ptr<A<T>>;
};
template <typename T>
class B
{
public:
typename A<T>::Uptr a;
};
int main() {
B<int> b;
}