Я использую в первый раз функцию std :: find_if в коде C++. Примеры и логика, которые я хочу выполнить, довольно просты, но почему-то я не могу заставить ее работать.C++, find_if не работает
Я создал класс «Finder» таким образом:
/**
* @class message_by_id_finder
* @brief A class to find the matching lane wrapper
*/
class message_by_id_finder
{
public:
/** @brief constructor */
explicit message_by_id_finder(int id) :
m_myMessage(id) {
}
/** @brief the comparing function */
bool operator()(const AppMessage& message) const {
return message.messageId == m_myMessage;
}
private:
/// @brief The id of the searched object
int m_myMessage;
};
Затем я использую его следующим образом:
// Loop messages
for (vector<AppMessage>::iterator it = messages.begin(); it != messages.end() ; ++it) {
// Match message with the registered by the App
AppMessage m = *it;
vector<AppMessage>::iterator it2 = find_if(m_messages.begin(), m_messages.end(), message_by_id_finder(m));
if (it2 != m_messages.end()) {
// FOUND!
} else {
// NOT FOUND
}
}
Я петельные вектор m_messages и есть члены, которые соответствуют ид но it2 всегда 0x00. Я делаю что-то особенное неправильно?
спасибо, что заранее.
PD: Только в случае, другая часть кодов, полезных для понимания проблемы:
/**
* @struct AppMessage
* @brief Information of a message carrying a result of the App.
*/
struct AppMessage {
int messageId;
float payloadValue;
};
Ваша реализация `operator()` является анти-шаблоном. Код должен быть записан как `return id = m_myMessage ;, вместо этого. ** Никогда ** писать `if (condition) return true; else возвращает false; `. – 2010-11-25 15:22:30
Отсутствует близкая скобка для `operator()`. `it2! = m_messages.end()` означает, что идентификатор сообщения * был * найден, а не то, что это не так. Я предлагаю вам написать полную программу, которая компилирует и демонстрирует поведение, которое вас удивляет, и задайте вопрос об этой программе. В противном случае вы могли бы просто получить ответы на опечатки весь день, ни один из которых не присутствует в вашем реальном коде. – 2010-11-25 15:27:37
Спасибо, Конрад. Но, не используя шаблон, который вы упоминаете, вызывает ошибку? Кроме того, 'return id = m_myMessage;' верный? Не должно быть 'return id == m_myMessage;'? – Julen 2010-11-25 15:27:59