Dies ist eine Template-Funktion, die einen Zeiger (oder ein Zeiger wie Objekt) führt und eine Elementfunktion:Mitglied Funktionsaufruf auf Shared_ptr durch Mitglied Funktionszeiger in Vorlage
template <typename Ptr, typename MemberFunctor>
int example(Ptr ptr, MemberFunctor func)
{
return (ptr->*func)();
}
Wenn Werke, wenn sie mit gewöhnlichen Zeigern verwendet:
struct C
{
int getId() const { return 1; }
};
C* c = new C;
example(c, &C::getId); // Works fine
Aber es funktioniert nicht mit Smart-Pointer:
std::shared_ptr<C> c2(new C);
example(c2, &C::getId);
Fehler Nachricht:
error: C2296: '->*' : illegal, left operand has type 'std::shared_ptr<C>'
Warum? und wie man etwas macht, das mit beiden zusammenarbeitet?
Verwandte: http://stackoverflow.com/questions/31851987/pointer-like-classes-and-the -Operator – Quentin