我有一个类(称其为Outer
),它有一个私有成员类(Inner
)。我想在无序的标准容器中存储Outer::Inner
的实例,因此我想专门化std::hash<Outer::Inner>
。
但是,在编写以下内容时:
namespace std {
template<>
struct hash<Outer::Inner> {
std::size_t operator()(const Outer::Inner &arg) const
{
return std::hash<int>()(arg.someSpecialProperty);
}
};
}
编译器报错:
error: 'Inner' is a private member of 'Outer'
std::size_t operator()(const Outer::Inner &p) const
^
我尝试通过遵循这个答案来使std::hash
成为友元结构体,但是失败了:前向声明Outer::Inner
无法使用:
error: use of undeclared identifier 'Outer'
那么,如果我想要做的事情是可能的,我应该如何继续呢?
std::hash
模板的人,对吧? - The Paramagnetic CroissantOuter
内部声明friend struct std::hash<Inner>;
吗?(可能在声明或定义Inner
之后。)然后再进行特化定义。 - Alan Stokes