J'ai class, contenant un QStateMachine
. Il a également un couple de QState*
s.Getter sûr à QStates
private:
QStateMachine m_machine;
QState* m_state1
QState* m_state2
...
J'initialise la machine d'état dans le constructeur et active la machine. Comme les états sont privés, mais je veux permettre à un utilisateur de sous-classer et de modifier un certain comportement (par exemple ajouter des transitions, changer les propriétés, se connecter à des signaux par exemple). Je veux ajouter quelques getters. Je n'ajoute pas de setters, comme l'indique la documentation:
La suppression des états pendant le fonctionnement de la machine est déconseillée.
Le produit QtCreator quelque chose comme ça:
QState *MyClass:state1() const
{
return m_state1;
}
qui semble agréable.
Cependant, il me semble que cela aussi circonvient ma décision ne fournissant pas setters, comme quelque chose comme ça est possible:
QState* state = state1();
*state = QState([...]);
qui, à ma compréhension supprime le state1
original et remplace par un nouvel état.
Donc, mon idée était de retourner un const QState*
à la place.
const QState* MyClass::state() const
{
return m_state1;
}
Ce qui semble au travail (l'exemple ci-dessus va lancer une erreur du compilateur). Cependant, je suis si nouveau au C++ que je ne suis pas sûr de savoir ce que j'ai fait là-bas et s'il y a d'autres implications.
Quelle est la bonne façon d'obtenir le comportement désiré?
Merci! Je pense que j'ai compris un peu plus, cependant j'ai réalisé, que je ne peux pas imposer mon désir, comme par ex. le 'QTransaction'' QState's n'est pas const, et nécessite un pointeur normal vers un autre 'QState'. Par conséquent, je dois autoriser l'accès non-const au pointeur. – derM