У меня есть функции-членов следующейПередача функции члена с двумя параметрами для C++ алгоритма STL stable_partition
class foo
{
public:
...
bool isNotEqualId(const Agent&, const int);
std::vector<Agent> foo::extractAgents(int id);
private:
std::vector<Agent> agents;
}
Определение функции ниже:
bool foo::isNotEqualId(const Agent& agent, const int id)
{
return (agent.groupId != id);
}
Теперь в обув, я разбиение на разделы агентов с учетом идентификатора агента, чтобы впоследствии извлечь их с другим параметром.
std::vector<Agent>& foo::extractAgents(int id)
{
std::vector<Agent>::iterator iter = std::stable_partition(agents.begin(), agents.end(), &foo::isNotEqualId(id));
// Partition to find agents that need to be removed
std::vector<Agent>::iterator extractedGroupiter = std::stable_partition(iter, agents.end(), keepAgent);
// Create a vector with the agents that need to be removed
std::vector<Agent> extractedGroup(extractedGroupiter, agents.end());
// Erase them from the agents vector
agents.erase(extractedGroupiter, agents.end());
return extractedGroup;
}
использование std::stable_partition
используется для работы при использовании функций, которые имели значение фиксированной группы, такие как
bool isNotGroup0(const Agent& a)
{
return a.groupId != 0;
}
Однако, теперь я хочу использовать функцию-член, которая принимает два параметра, так Идентификатор группы может быть параметром. stable_partition
принимает унарный предикат, который вызывает у меня проблему. Я попытался использовать std::bind2nd
с std::mem_fun
, чтобы связать второй параметр при передаче его stable_partition
, но он приводит к ошибкам с mem_fun
, не имеющим экземпляра перегруженной функции.
Я также попробовал решение-функтор, такое как here, которое предлагает использовать std::binary_function
, однако он, понятно, приводит к ошибке term does not evaluate to a function taking 1 arguments
. Я использую VS2010. Любые указатели?
Другой вопрос: почему вы пишете имя класса в этой строке std :: vector foo :: extractAgents (int id); –
'bool foo :: isNotEqualId (const Agent &, const int id)' отсутствует идентификатор, вероятно агент. Это опечатка? Какая у вас ошибка ? –
Да, это опечатка, только что обновленная – ccoder83