2017-10-16 14 views
0

Comment créer un vecteur de pointeurs vers des méthodes de classe? J'ai mon vecteur en tant que membre de la classe (vecteur doit pointeurs de stocker des méthodes avec différentes valeurs de retour et signatures):Vecteur de pointeurs vers des méthodes de classe QT

QVector<void(*)()> m_operationsVector; 

J'ai la méthode exemple de classe:

QString sampleMethod(QJsonObject &jsonObject, QString delim); 

Et je suis en train d'ajouter pointeur de cette méthode à vecteur:

m_operationsVector.push_back(sampleMethod); 

Mais malheureusement lors de l'ajout de ce pointeur au vecteur Je reçois cette erreur:

error: invalid use of non-static member function 

Comment puis-je résoudre ce problème?

+0

Si Foo est votre classe, vous pouvez essayer de la manière suivante: 'QVector m_operationsVector,' ' m_operationsVector.push_back (& ​​Foo :: processSetBlindStateRequest);' –

+0

_vector doit stocker des pointeurs de méthodes avec différentes valeurs de retour et signatures_ et comment décidez-vous comment les appeler? –

+0

Avez-vous envisagé d'utiliser un signal/emplacement? –

Répondre

1

tout d'abord pointeur vers méthode de classe est défini différemment, de sorte que ce vecteur devrait ressembler à ceci:

QVector<void (A::*)()> m_operationsVector; 

En second lieu en C++ 11, il est plus pratique d'utiliser std::function et lambdas:

QVector<std::function<void()>> m_operationsVector; 

operationsVector.push_back([this]() { this->someMethod(); }); 

Troisièmement, lorsque ceci est combiné avec JSon, cela semble suspect. Qu'est-ce que tu fais? Cela ressemble à XY Problem.