在不键入别名类型的完整声明的情况下,无法从类模板定义中访问类型的类型别名
Cannot access type alias from class template definition in separate file without typing full declaration of alias type
我有一个类模板,例如 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;
}
相关文章:
- 继承模板类中的类型别名
- 为什么 GCC 在使用类型别名时处理 const reinterpret_cast不同?
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 如何使用类型别名从模板化类中隐藏模板列表
- 如何检测类型类型别名?
- C++类型别名,其中值被替换
- 在Qt中注册自定义元类型的别名类型
- 使用外部定义的模板类型作为模板参数的更通用模板的模板别名
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- 通过类型别名从构造函数转发模板推导
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 为什么此模板定义了一组匹配void的别名类型
- 如何返回类中别名类型的值
- 在不键入别名类型的完整声明的情况下,无法从类模板定义中访问类型的类型别名
- 依赖于参数的查找在来自另一个命名空间的别名类型上意外行为
- 为什么我不能用"unsigned"限定别名类型?
- 当涉及到友谊时,为什么别名模板会与别名类型模板区别对待
- size_t是否保证是整数类型之一的别名类型?
- 将别名模板强制转换为别名类型