Ich habe eine Liste von Objekten, wo ich eine Member-Funktion aufrufen muss - keine große Sache bisher: Iterieren durch die Liste, diesen Aufruf - fertig.Rufen Sie eine Objekt-Member-Funktion auf einer Liste von Objekten mit std :: function
Jetzt habe ich verschiedene Orte, die fast das gleiche auf der gleichen Liste, außer dass die aufgerufene Member-Funktion ändert (Argument ist immer das gleiche, ein doppelter Wert).
Ich versuchte ein bisschen mit std :: Funktion, aber am Ende kann es nicht funktionieren. Irgendwelche Vorschläge? (Ich bin nach vielen Jahren C# zurück in C++, habe also viel vergessen).
Dies ist, wie es jetzt aussieht:
void CMyService::DoSomeListThingy(double myValue)
{
for (std::list<CMyListItem*>::iterator v_Iter = myList.begin(); v_Iter != myList.end(); ++v_Iter)
{
(*v_Iter)->MethodToBeCalled(myValue);
}
}
void CMyService::DoSomeThingDifferent(double myValue)
{
for (std::list<CMyListItem*>::iterator v_Iter = myList.begin(); v_Iter != myList.end(); ++v_Iter)
{
(*v_Iter)->CallTheOtherMethod(myValue);
}
}
Und das ist, wie ich es vorziehen würde:
void CMyService::DoSomeListThingy(double myValue)
{
ApplyToList(&CMyListItem::MethodToBeCalled, myValue);
}
void CMyService::DoSomeThingDifferent(double myValue)
{
ApplyToList(&CMyListItem::CallTheOtherMethod, myValue);
}
void CMyService::ApplyToList(std::function<void(double)> func, double myValue)
{
for (std::list<CMyListItem*>::iterator v_Iter = myList.begin(); v_Iter != myList.end(); ++v_Iter)
{
(*v_Iter)->func(myValue);
}
}
sieht sehr einfach aus, verwenden jedoch mit VS2010 verwenden sie Probleme haben; könnte es sein, dass es nicht unterstützt wird? –
Eine Variante hinzugefügt, die keine C++ 11-Funktionen verwendet. –
Ausgezeichnet, der zweite hat es für mich gelöst. –