如何返回类中别名类型的值
How to return a value of a type aliased in a class?
我有一个模板化类和一个别名类型。我想将这种类型用作成员函数的返回值,但它无法编译。
//file.h
template<class T>
class Test {
public:
using testing = T;
T value;
testing foo();
};
//file.cpp
template<class T>
testing Test<T>::foo() { //error 'testing' does not name a type
//code
}
我怎样才能让它工作?
通过以下方式更改foo
的定义:
template<class T>
typename Test<T>::testing Test<T>::foo() {
}
甚至不像@Jarod42建议的那样冗长
template<class T>
auto Test<T>::foo() -> testing {
}
您还应该阅读为什么模板只能在头文件中实现
应避免在头文件中使用指令,因为通常它们会在较大的代码库中带来麻烦 在头文件中使用C++"using"关键字是错误的吗?
但我在这里看到的真正问题是你试图将模板类的实现拆分为 cpp 文件。这仅适用于链接,如果您使用大多数开发人员会认为不良做法或至少意外/不需要的解决方法 https://www.codeproject.com/Articles/48575/%2FArticles%2F48575%2FHow-to-define-a-template-class-in-a-h-file-and-imp
所以我会说将实现放在头文件中,不要在那里使用,你很好,这将是实现模板类的预期方式。
你可以用它来让你的生活更轻松,并给事情起更好的名字是typedef。
模板方法必须在标头中实现。
testing
除非它与测试相关联,否则没有任何意义
您需要将两者放在头文件 ( file.h
) 中,当这些函数声明在同一类中时会更容易:
template<class T>
class Test {
public:
using testing = T;
T value;
testing foo()
{
return testing();
}
};
相关文章:
- 继承模板类中的类型别名
- 为什么 GCC 在使用类型别名时处理 const reinterpret_cast不同?
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 如何使用类型别名从模板化类中隐藏模板列表
- 如何检测类型类型别名?
- C++类型别名,其中值被替换
- 在Qt中注册自定义元类型的别名类型
- 使用外部定义的模板类型作为模板参数的更通用模板的模板别名
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- 通过类型别名从构造函数转发模板推导
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 为什么此模板定义了一组匹配void的别名类型
- 如何返回类中别名类型的值
- 在不键入别名类型的完整声明的情况下,无法从类模板定义中访问类型的类型别名
- 依赖于参数的查找在来自另一个命名空间的别名类型上意外行为
- 为什么我不能用"unsigned"限定别名类型?
- 当涉及到友谊时,为什么别名模板会与别名类型模板区别对待
- size_t是否保证是整数类型之一的别名类型?
- 将别名模板强制转换为别名类型