C++ 自定义比较函子
C++ Custom Comparison Functors
我正在尝试将自定义仿函数传递给 std::map。
因此,我在 HEADER 文件中声明了以下仿函数和 class,其成员是映射。
class Comp {
bool g;
public:
Comp(bool greater) : g(greater) {}
bool operator()(float lhs, float rhs) const {
if (g) return lhs >= rhs;
return lhs < rhs;
}
};
class OrderBook {
u_char OrderBookType;
std::map<float, std::vector<float*>, Comp> OrderBookData;
public:
OrderBook(u_char);
float best_bid_ask(int);
};
并且在 .cpp 文件中,我如下定义 OrderBook class 的构造函数以初始化 std::map。
OrderBook::OrderBook(u_char bookType) {
OrderBookType = bookType;
OrderBookData(Comp(bookType == 'B'));
}
但是,当我尝试编译程序时,我 运行 出现“类型不提供调用运算符”错误:
error: type 'std::map<float, std::vector<float *>, Comp>' does not provide a call operator
OrderBookData(Comp(bookType == 'B'));
我很困惑为什么我 运行 会陷入这个错误。
非常感谢任何帮助。
您需要使用initializer list syntax构造成员:
OrderBook::OrderBook(u_char bookType) :
OrderBookType{bookType},
OrderBookData{Comp{bookType == 'B'}} { }
在您尝试构建地图的位置,它已经默认构建。您使用的语法看起来像一个函数调用,因此编译器在地图上寻找合适的 operator()
函数,但没有找到它——因此出现错误。
我正在尝试将自定义仿函数传递给 std::map。
因此,我在 HEADER 文件中声明了以下仿函数和 class,其成员是映射。
class Comp {
bool g;
public:
Comp(bool greater) : g(greater) {}
bool operator()(float lhs, float rhs) const {
if (g) return lhs >= rhs;
return lhs < rhs;
}
};
class OrderBook {
u_char OrderBookType;
std::map<float, std::vector<float*>, Comp> OrderBookData;
public:
OrderBook(u_char);
float best_bid_ask(int);
};
并且在 .cpp 文件中,我如下定义 OrderBook class 的构造函数以初始化 std::map。
OrderBook::OrderBook(u_char bookType) {
OrderBookType = bookType;
OrderBookData(Comp(bookType == 'B'));
}
但是,当我尝试编译程序时,我 运行 出现“类型不提供调用运算符”错误:
error: type 'std::map<float, std::vector<float *>, Comp>' does not provide a call operator
OrderBookData(Comp(bookType == 'B'));
我很困惑为什么我 运行 会陷入这个错误。
非常感谢任何帮助。
您需要使用initializer list syntax构造成员:
OrderBook::OrderBook(u_char bookType) :
OrderBookType{bookType},
OrderBookData{Comp{bookType == 'B'}} { }
在您尝试构建地图的位置,它已经默认构建。您使用的语法看起来像一个函数调用,因此编译器在地图上寻找合适的 operator()
函数,但没有找到它——因此出现错误。