C++:如何返回在模板类中定义的别名

C++: How to return an alias defined in a template class?

本文关键字:定义 别名 何返回 返回 C++      更新时间:2023-10-16

所以我有一个模板类(缩写),比如:

template <typename keyT, typename valueT>
class hashMap {
public:
    using dataT = pair<keyT,valueT>;
    using maybeT = optional<dataT>;
    maybeT notFound = optional<dataT> ();
    maybeT find(keyT &v);
    <snip>
};

当我试图定义find()时,我有

template <typename keyT, typename valueT>
hashMap::maybeT hashMap<keyT,valueT>::find(keyT &k)
{

和hashMap::maybeT未被识别("应为类或命名空间")。使用keyT和valueT限定hashMap也没有帮助。

如何导出这些别名(或者typedef,如果有办法的话)。

您需要消除从属名称的歧义:

template <typename keyT, typename valueT>
typename hashMap<keyT, valueT>::maybeT hashMap<keyT,valueT>::find(keyT &k)
// ^^^^^
{
    // ...
}

(既然你在写一个模板,那么你最好保持所有内容都是内联的,并减少代码噪音。否则你应该在成员函数声明中添加inline。)