Я закодировал шаблон общей функции, как показано ниже, который не создается.о передаче предиката в качестве аргумента шаблона
Он строит только в том случае, если предикат находится в папке const reference
или by value
.
Знаете ли вы, какой принцип C++ следует в этом случае?
Я использую g ++, и моя версия не содержит C++ 11.
Я проверил, что возвращает boost::bind
, и он говорит unspecified type
(я надеюсь, что прочитал правильно).
struct MyRecord{
int a_;
int b_;
};
template<class Predicate>
bool isAny(Predicate &pred) {
vector<MyRecord>::iterator it = std::find_if(
records.begin(),
records.end(),
pred);
if(it!=records.end()) {
// .. do something
}
return it != records.end();
}
isAny(boost::bind(&MyRecord::a_,_1)==1);
isAny(boost::bind(&MyRecord::b_,_1)==2);
// It works with the 2 declarations below
template<class Predicate>
bool isAny(const Predicate &pred);
// or
template<class Predicate>
bool isAny(Predicate pred);
Почему бы не 'isAny ([] (const MyRecord & record) {return record.a_ == 1;});'? – sjdowling
Sorry.Forgot указать, что у меня нет C++ 11. –