7
votes

C ++ Opérateur surchargé avec l'ordre inverse de l'associativité

Il était très difficile de proposer un titre ... (Je ne suis pas un orateur anglais natif.) XXX PRE>

Ce code compile / fonctionne comme prévu, mais quand je change A = A + 2 à A = 2 + A, il ne compilera plus. GCC me donne cette erreur: P>

no match for ”operator+” in ”2 + a”


0 commentaires

3 Réponses :


9
votes

Vous avez besoin d'une fonction libre, définis après la classe xxx

aussi, vous pourriez envisager de définir a & opérateur + = (int i); in A une implémentation des deux versions de opérateur + comme fonctions libres. Vous pouvez également être intéressé par Boost.Operateurs ou d'autres aides à simplifier A , voir mon profil pour deux options.


1 commentaires

Fonctionne parfaitement! J'ai oublié de faire l'opérateur + dans un const, je vais le réparer maintenant.



4
votes

Bien sûr, définissez l'opérateur inverse en dehors de la classe:

struct A
{
    int value;
    A operator+(int i) const
    {
        A a;
        a.value=value+i;
        return a;
    };
};
//marked inline to prevent a multiple definition
inline A operator+(int i, const A& a)
{
    return a + i;
}


0 commentaires

0
votes

Les autres réponses ici fonctionnent bien. Cependant, une autre option que vous avez consiste à créer un constructeur pour un seul int comme ceci: xxx

ceci permet aux entiers d'obtenir implicitement converti et vous permet de surcharger uniquement opérateurs pour votre struct à la place: xxx

Bien sûr, cela permet à tous les entiers d'être convertis implicitement en A S , qui peut ou non être souhaitable.


0 commentaires