Невозможно получить доступ к псевдониму типа из определения шаблона класса в отдельном файле без ввода полного объявления типа псевдонима.
У меня есть шаблон класса, как Sample.hpp с псевдонимом типа X.
#ifndef SAMPLE_HPP
#define SAMPLE_HPP
template<typename STA, typename STB>
class Sample
{
using X = Sample<STA,STB>;
public:
Sample();
inline X* GetNext() const;
private:
X* Next;
};
#include "Sample.cpp"
#endif // SAMPLE_HPP
И определения есть в Sample.cpp.
#include "Sample.hpp"
template<typename STA, typename STB>
Sample<STA,STB>::Sample() {
Next = nullptr;
}
template<typename STA, typename STB>
typename Sample<STA,STB>::X* Sample<STA,STB>::GetNext() const {
return this->Next;
}
Мой вопрос заключается в том, есть ли другие способы определения функции GetNext. Например, без typename или без полного объявления шаблона класса Sample. Когда я меняю код на
template<typename STA, typename STB>
Sample<STA,STB>* Sample<STA,STB>::GetNext() const {
return this->Next;
}
Это работает, но я не могу использовать псевдоним типа здесь, например:
template<typename STA, typename STB>
X* Sample<STA,STB>::GetNext() const {
return this->Next;
}
1 ответ
Вы можете использовать конечный тип возврата с помощью auto
:
template<typename STA, typename STB>
auto Sample<STA, STB>::GetNext() const -> X* {
return this->Next;
}