在不键入别名类型的完整声明的情况下,无法从类模板定义中访问类型的类型别名

Cannot access type alias from class template definition in separate file without typing full declaration of alias type

本文关键字:别名 类型 访问类型 定义 情况下 声明      更新时间:2023-10-16

我有一个类模板,例如 sample.hpp with type别名 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 或不完整声明示例类模板。当我将代码更改为

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;
}

您可以在auto的帮助下使用尾随的返回类型:

template<typename STA, typename STB>
auto Sample<STA, STB>::GetNext() const -> X* {
    return this->Next;
}