【发布时间】:2014-05-22 15:43:38
【问题描述】:
我尝试使用 find_if 根据值在地图中查找键。但我无法编译代码:
struct IsCurrency : binary_function<pair<const Bill::CodeCurrency, string>, string, bool> {
bool isCurrency(const pair<const Bill::CodeCurrency, string>& element, const string& expected) const {
return element.second == expected;
}
};
string currency = "RUB";
map<Bill::CodeCurrency, string>::const_iterator my_currency = find_if(Bill::currency_code_map().begin(), Bill::currency_code_map().end(), bind2nd(IsCurrency(), currency)); /// <--- ERROR IS HERE
Bill::CodeCurrency 是一个枚举。
错误:
/usr/include/c++/4.7/bits/stl_algo.h:4490:41: required from ‘_IIter std::find_if(_IIter, _IIter, _Predicate) [with _IIter = std::_Rb_tree_const_iterator<std::pair<const Bill::CodeCurrency, std::basic_string<char> > >; _Predicate = std::binder2nd<IsCurrency>]’
../src/money_acceptor/itl_bill_acceptor.cpp:182:121: required from here
/usr/include/c++/4.7/backward/binders.h:155:29: error: no match for call to ‘(const IsCurrency) (const first_argument_type&, const second_argument_type&)’
您能帮我确定这里的错误是什么吗?
【问题讨论】:
-
1) 代码的格式很糟糕(我见过更糟糕的,但是 > 190 字符长的行?) 2) 使用已弃用的 StdLib 实体(例如
binary_function) 3)你的问题是isCurrency应该是operator()-> compiles then -
多一点上下文会很有用。例如,从您的示例中很难判断
Bill是命名空间还是类。
标签: c++ templates const-iterator bind2nd