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

时间:2017-01-08 13:43:51

标签: c++ templates

我有以下问题,嵌套类(在本例中为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;
}

我收到错误的地方:&#34;使用类模板需要模板参数列表&#34;

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

1 个答案:

答案 0 :(得分:3)

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

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

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