【发布时间】:2020-07-11 21:56:38
【问题描述】:
我正在尝试将自定义函子传递给 std::map。
所以,我在 HEADER 文件中声明了以下仿函数和其成员是映射的类。
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 类的构造函数,用于初始化 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'));
我很困惑为什么会遇到这个错误。
非常感谢任何帮助。
【问题讨论】:
-
一个不相关的问题是,当
g(更大)为真时的比较不是严格的弱排序,因为它在两个值相等时返回真。你应该使用return lhs > rhs;。