C++嵌套类函数返回类型和命名空间

C++ nested class function return type and namespace

本文关键字:命名空间 返回类型 类函数 嵌套 C++      更新时间:2023-10-16

我有以下问题,嵌套类(在本例中为 struct)命名空间和返回类型

class Example
{
struct Node { /* with all the methods it needs */ }
Node * func();
}

现在我想把func的实现放在类之外。所以我所做的是:

Example::Node * Example::func()
{
return nullptr;
}

它工作正常,直到我制作了example模板

template<typename T>
class Example {/* all the same here */}
template <typename T>
Example<T>::Node * Example<T>::func()
{
 return nullptr;
}

我在那里遇到很多错误。然后我试了

 template <typename T>
Example::Node * Example<T>::func()
{
 return nullptr;
}

我在哪里得到错误:"使用类模板需要模板参数列表"

据我所知Example<T>::func()是正确的,因为这意味着该函数属于该命名空间。但我不确定我的函数的返回类型。有什么帮助吗?

模板与非模板不同,它们以后可能会专门化。在这些未知的专用化中,Example<T>::Node可能是静态成员的名称,或者该名称可能根本不存在。

该标准要求您使用typename来明确指定Example<T>::Node是类型的名称,即模板类Example的成员类型名称,而不是其他名称,例如Example的静态成员。

template <typename T>
typename Example<T>::Node * Example<T>::func()
{
 return nullptr;
}