您好我正在处理此项目,并在标题中定义了以下文件
typedef std::function<unsigned int(const std::string&)> HashFunction;
我如何在HashFunction中使用它? 当我尝试
HashFunction myHashFunction;
myHashFunction("mystring");
程序崩溃了。
答案 0 :(得分:17)
类型为std::function<Signature>
的对象的行为非常类似于指向具有签名Signature
的函数的函数指针。默认构造的std::function<Signature>
只是没有指向任何函数。 std::function<Signature>
和函数指针Signature*
之间的主要区别在于,您可以在std::function<Signature>
中以函数对象的形式拥有某种状态。
要使用此类型的对象,您需要使用合适的函数对其进行初始化,例如
#include <functional>
typedef std::function<unsigned int(const std::string&)> HashFunction;
struct Hash {
unsigned int operator()(std::string const& s) const {
return 0; // this is a pretty bad hash! a better implementation goes here
}
};
int main() {
HashFunction hash{ Hash() };
hash("hello");
}