tem*_*def 20 c++ hash pointers c++11 stdhash
可以使用C++ 11 std::hash
类型来散列函数指针吗?有一个hash
部分专业化定义为
template <typename T> struct hash<T*>;
Run Code Online (Sandbox Code Playgroud)
但由于函数指针与C++中的其他指针类型不同(例如它们无法转换为void*
),我不确定将它用于类似int(*)()
或类型的类型是否安全void(*)(int, int)
.
这是允许的吗?新ISO规范中是否有任何特定的措辞支持或驳斥这一点?
谢谢!
Tri*_*dle 11
好问题.我肯定不知道答案,我很乐意推荐给比我更了解的人,但我的想法是,即使函数指针与数据指针不同,它们仍然是指针:所以std::hash<T*>
应该应用部分专业化.
对于它的价值,即使-pendantic
在g ++ 4.8.1和clang 3.3中,以下编译也没有警告,并按预期工作:
#include <functional>
#include <iostream>
void func1(int) {}
void func2(int) {}
int main()
{
typedef void (*func_type) (int);
std::hash<func_type> hash;
std::cout << hash(func1) << std::endl;
std::cout << hash(func2) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我真的很感兴趣,如果有人有任何参考标准来支持这一点.