nicht genau das, was Sie aufgefordert, aber ich nehme an, Sie someting wie
#include <array>
#include <vector>
#include <iostream>
template <typename Class, typename Method, typename ... Args>
void callMethod (Class & c, Method m, Args ... args)
{ ((&c)->*m)(args...); }
int main()
{
std::vector<int> v;
std::array<int, 5U> a;
callMethod(v, &std::vector<int>::size);
callMethod(v, static_cast<void (std::vector<int>::*)(int const &)>
(&std::vector<int>::push_back), 7);
callMethod(a, &std::array<int, 5U>::fill, 3);
std::cout << v.back() << std::endl; // print "7"
for (auto const i : a)
std::cout << i << std::endl; // print "3" five times
}
Beachten Sie, dass mit push_back()
Methode von std::vector<int>
tun können, müssen Sie eine Besetzung (static_cast<void (std::vector<int>::*)(int const &)>
), um die Überlastung Mehrdeutigkeit aufzulösen (es gibt zwei push_back()
in std::vector<int>
)
nicht über die Verwendung von GetPtr()
sicher und GetArgs()
, aber ich nehme an, Sie callMethod()
wie folgt
verwenden können
callMethod(GetPtr<B>(), &B::sum, GetArgs<double>(),
GetArgs<double>());
callMethod(GetPtr<C>(), &C::sum2, GetArgs<std::string>(),
GetArgs<double>(), GetArgs<double>());
Wo haben Sie vor, Argumente für 'MethodName' aufzurufen? –
@EdgarRokyan Es sind von Lua übergeben. Jeder 'GetArg 'ruft ein Argument vom Stack auf. Ich habe Vorlagen Spezialisierungsmethoden für verschiedene 'T' –
MethodName ist ein Typ. Aus der Sicht der Dinge benötigen Sie einen Mitgliedsfunktionszeiger. Vorlagenvorlage vielleicht? – DeiDei