En passant de l'opérateur en tant que paramètre
Je veux avoir une fonction qui prend la valeur 2 bool vars (comme une table de vérité)
par exemple:
depuis
T | F : T
puis
myfunc('t', 'f', ||); /*defined as: bool myfunc(char lv, char rv, ????)*/
doit retourner vrai;
comment puis-je passer le troisième paramètre?
(Je sais, c'est possible de le passer comme un char*, mais alors je vais avoir un autre tableau pour comparer opérateur de chaîne, puis faire l'opération qui est quelque chose que je voudrais éviter)
Est-il possible de passer d'un opérateur comme ^(XOR) ou ||(OU) ou &&(ET), etc dans une fonction/méthode?
Merci d'avance
Vous devez vous connecter pour publier un commentaire.
Définir:
si vous avez le coup de pouce, ou
si vous avez le C++0x compilateur, ou
Si vous voulez qu'il soit un modèle. Ensuite, vous pouvez appeler le:
@ybungalobill posté un C++ bonne réponse et vous devez vous en tenir à elle. Si vous souhaitez passer des opérateurs, des fonctions ne fonctionneront pas, mais des macros de faire le travail:
Être prudent, les macros sont mal.
Ce que vous pouvez faire est de définir le proxy opérateurs qui retournent des types spécifiques.
Vous pouvez si désespérée de la chaîne cet effet à l'aide de modèles de passe complexes, des expressions logiques.
Aussi, l'opérateur XOR est au niveau du bit, pas de logique, bien que la différence est réaliste rien.
Cependant, il ya une raison que les lambdas existent dans C++0x et c'est parce que ce genre de chose à plat suce en C++03.
operator||
etoperator&&
mal?&&
ou||
!operator||
etoperator&&
est mal (parce que ces surcharges sont plus paresseux et d'évaluer leurs paramètres dans l'ordre non défini), sauf s'ils sont utilisés pour l'expression de modèles (où ce n'est pas grave), comme dans ce cas.Il est difficile d'être réalisé. En C++, la fonction, le paramètre besoin d'un memroy adresse pour trouver son objet, mais l'opérateur est décidé au moment de la compilation. L'opérateur ne sera pas un objet. Ainsi, vous pouvez penser au sujet de MACRO pour terminer votre tâche.