如何返回类中别名类型的值

How to return a value of a type aliased in a class?

本文关键字:别名 类型 何返回 返回      更新时间:2023-10-16

我有一个模板化类和一个别名类型。我想将这种类型用作成员函数的返回值,但它无法编译。

//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();
    }
};