模板类内模板类的函数返回类型

Function return type for template class inside template class

本文关键字:返回类型 函数      更新时间:2023-10-16

我正在使用 c++ 模板并在模板类中创建了一个模板类。

情况是这样的:

template <typename T>
class C {
public:
class N {
T v;
};
template <typename D>
N *fun(D d);
};
template <typename T>
template <typename D>
N *C<T>::fun(D d) {
}
int main() {
C<int> obj;
obj.fun('c');
}

现在编译器给出的错误是:

main.cpp:14:1: 错误:"N"未命名类型

如果我在类外使用函数原型作为C<T>::N *C<T>::fun(D d),编译器给出错误:

main.cpp:14:1:错误:在"C::N"之前需要"typename",因为"C"是依赖范围

如果我在类中定义定义,那么它可以正常工作。但是我不想让它内联,我该怎么办?

正如编译错误所建议的那样,请使用typename

template <typename T>
template <typename D>
typename C<T>::N *C<T>::fun(D d) {
}

作为替代方法,您可以使用尾随返回类型:

template <typename T>
template <typename D>
auto C<T>::fun(D d) -> N*
{
return nullptr;
}