所以我有类似的模板类(缩写):

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。)

关于c++ - C++:如何返回在模板类中定义的别名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23072268/

10-15 14:26