Я новичок в использовании алгоритмов STL и в настоящее время застрял на синтаксической ошибке. Моя общая цель этого состоит в том, чтобы отфильтровать список источников, как вы бы использовали Linq в c #. В C ++ могут быть другие способы сделать это, но мне нужно понять, как использовать алгоритмы.
Мой пользовательский функциональный объект для использования в качестве моего функционального адаптера:
struct is_Selected_Source : public std::binary_function<SOURCE_DATA *, SOURCE_TYPE, bool>
{
bool operator()(SOURCE_DATA * test, SOURCE_TYPE ref)const
{
if (ref == SOURCE_All)
return true;
return test->Value == ref;
}
};
И в моей основной программе я использую следующее -
typedef std::list<SOURCE_DATA *> LIST;
LIST; *localList = new LIST;;
LIST* msg = GLOBAL_DATA->MessageList;
SOURCE_TYPE _filter_Msgs_Source = SOURCE_TYPE::SOURCE_All;
std::remove_copy(msg->begin(), msg->end(), localList->begin(),
std::bind1st(is_Selected_Source<SOURCE_DATA*, SOURCE_TYPE>(), _filter_Msgs_Source));
Что я получаю в Rad Studio 2010. Следующая ошибка: «В исходном файле используется символ typedef, где переменная должна появляться в выражении».
"E2108 Неправильное использование typedef 'is_Selected_Source'"
Редактировать -
Проведя больше экспериментов в VS2010, который имеет лучшую диагностику компилятора, я обнаружил, что проблема в том, что определение remove_copy допускает только унитарные функции. Я изменил функцию на униарную и заставил ее работать.