Ich erstelle Containervorlage für andere Typen. Einer der Typen wird shared_ptr
zu Objekt sein. Also für vermeiden doppelten Code für Operanden ->
und .
des Aufrufs von Objektmethoden Ich versuche Zeiger auf Verfahren als Funktion Argument übergeben, aber ich habe diesen Fehler:Wie übergeben Sie Methodenzeiger als Argument in Vorlage Klassenmethode
error: invalid use of non-static member function 'void A::show()'
{ doOperation(U::show); }
Code:
template <typename T, typename U>
class MepVector
{
private:
typedef void(U::*Operation)();
public:
MepVector() {}
void doOperation(Operation operation)
{
for(const auto& t : mepVector_)
{
(t.*operation)();
}
}
void add(T t)
{ mepVector_.push_back(t); }
void show()
{ doOperation(U::show); }
private:
std::vector<T> mepVector_;
};
class A
{
public:
A() {};
void show()
{ cout<<"udalo sie!"<<endl; }
};
int main() {
MepVector<A,A> myVector;
myVector.add(A());
myVector.show();
return 0;
}
I don möchte nicht machen A::show()
static
.
Dank, es funktioniert – user3191398