我尝试将一个操作符()与一个函数对象进行绑定。然后,我想将此函数对象用作我声明的映射中的自定义比较器。但是我收到以下编译错误
错误C3867:'Comparator :: operator()':非标准语法;采用 '&' 创建一个指向成员的指针 1> 错误C2672:'std :: bind':找不到匹配的重载函数
错误C2923:“ std :: map”:“ predict”不是有效的模板类型 参数“ _Pr”的参数
我不想使用lamda表达式
我编写的代码如下
#include "pch.h"
#include <algorithm>
#include <functional>
#include <iostream>
#include <map>
struct Comparator : std::binary_function<int const &, int const &, bool>
{
template<typename T>
bool operator()(T const & a, T const & b)
{
return a < b;
}
};
int main()
{
std::cout << "Hello World!\n";
std::function<bool(Comparator&,int const &, int const &)> predict =
std::bind(Comparator::operator(), std::placeholders::_1,
std::placeholders::_2);
std::map<int, int, predict> x;
}
答案 0 :(得分:2)
绑定后,您将获得使用2个参数(int,int)的函子,函数std::function<bool(Comparator&,int const &, int const &)>
的签名是错误的-Comparator
是多余的,请尝试以下操作:
std::function<bool(int const &, int const &)> predict =
std::bind( Comparator(), std::placeholders::_1, std::placeholders::_2);
std::map<int, int, decltype(predict)> x{predict};
答案 1 :(得分:2)
您无需在此处使用=QUERY(VBOM!R5:GJ2811,"SELECT BY",1)
或lambda。 std::bind
是完全有效的比较器,因此您只需将Comparator
声明为:
x
如果实际的std::map<int, int, Comparator> x;
具有需要初始化的某种状态,则可以将Comparator
对象传递给Comparator
的构造函数:
std::map