c ++ typedef std :: function<>如何使用?

时间:2013-11-16 01:36:16

标签: c++

您好我正在处理此项目,并在标题中定义了以下文件

typedef std::function<unsigned int(const std::string&)> HashFunction;

我如何在HashFunction中使用它? 当我尝试

HashFunction myHashFunction;
myHashFunction("mystring");
程序崩溃了。

1 个答案:

答案 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");
}