所以我有类似的模板类(缩写):
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/