如何在Visual C++ 2013中将函数对象作为参数传递?

Den*_* K. 0 c++ function visual-studio-2013

我试图将函数<>对象作为另一个方法的参数传递,以便灵活地从列表中获取元素.这是我的代码:

libusb_device * UsbKeyboard::GetSpecifiedDevice(function<bool(libusb_device *)> pred)
{
    if (_usbDevices == nullptr) return nullptr;
    int i = 0;
    libusb_device *dev = nullptr;
    while ((dev = _usbDevices[i++]) != NULL)
    {
        if (pred(dev))
            return dev;
    }

    return nullptr;
}


libusb_device * UsbKeyboard::GetHidDevice()
{
    function<libusb_device *> pred = [&](libusb_device *dev) -> bool  {
        struct libusb_device_descriptor desc;
        int r = libusb_get_device_descriptor(dev, &desc);
        if (r >= 0)
            return desc.bDeviceClass == LIBUSB_CLASS_HID;
    };

    return GetSpecifiedDevice(pred);
}
Run Code Online (Sandbox Code Playgroud)

编译错误位于此代码的第一行:

     error C2027: use of undefined type 'std::_Get_function_impl<_Fty>'
1>          with
1>          [
1>              _Fty=libusb_device *
1>          ]
1>          usbkeyboard.cpp(111) : see reference to class template instantiation 'std::function<libusb_device *>' being compiled
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional(551): error C2504: 'type' : base class undefined
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional(554): error C2027: use of undefined type 'std::_Get_function_impl<_Fty>'
1>          with
1>          [
1>              _Fty=libusb_device *
1>          ]
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional(554): error C2146: syntax error : missing ';' before identifier '_Mybase'
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional(554): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Run Code Online (Sandbox Code Playgroud)

它说函数<>的基类是未定义的.为什么?

Jar*_*d42 6

你输错了 function<libusb_device *> pred

它应该是

function<bool(libusb_device *)> pred
Run Code Online (Sandbox Code Playgroud)

或者干脆 auto pred