在mdart/mdart_function.h
中,定义了函数hash
。
inline nsaddr_t hash(nsaddr_t id) {
bitset<ADDR_SIZE> tempAddress_ (id);
bitset<ADDR_SIZE> address_;
for(unsigned int i=0; i<ADDR_SIZE; i++) {
if (tempAddress_.test(i)) {
address_.set(ADDR_SIZE - 1 - i);
}
}
address_.flip(ADDR_SIZE - 1);
nsaddr_t temp = (nsaddr_t) address_.to_ulong();
#ifdef DEBUG
fprintf(stdout, "\thash = %s\n", bitString(temp));
#endif
return temp;
}
在另一个源文件中,引用了hash
函数,其中包含正确的标题:
nsaddr_t dstAdd_ = hash(reqId);
但是,还有另一个hash
,std::hash
,当我构建它时它会抛出error: reference to 'hash' is ambiguous
。
有没有办法指定源代码尝试使用哪个hash
?我知道std::hash
,但是头文件中的hash
怎么样?
答案 0 :(得分:5)
您可以使用自定义hash
函数所在的命名空间来消除歧义。如果它不在显式名称空间中,那么只需::hash()
就可以在全局名称空间中找到它。
答案 1 :(得分:2)
如果您自己的哈希实现没有特定的命名空间,您可以使用::hash
来引用它。