8
votes

Surcharge de l'opérateur statique C ++

est-il possible de surcharger des opérateurs de classe C ++ dans le contexte statique? E.G.

class Class_1{ ... }
int main()
{

    Class_1[val]...

}


3 commentaires

Si classe_1 [val] donner un type? Comme vous vous tenez-vous à faire class_1 [val] v; ?


J'allais que cela produisait des valeurs intégrales, mais les types vont bien.


En C ++, les types ne peuvent pas être représentés dans le système de type (il n'y a que std :: type_id ) et je ne peux penser à aucun opérateur qui peut être surchargé de manière statique. Je suggère, au lieu de demander si votre idée de mise en œuvre est réalisable en C ++, vous présentez le problème réel ceci était censé résoudre. Quelqu'un pourrait être capable de suggérer une mise en œuvre réalisable.


4 Réponses :


3
votes

Si vous voulez dire que l'opérateur fonctionne sur une classe, le n ° qui n'a pas de sens, c'est comme dire opérateur + Mai Opérateur sur int ou ou ou ou Double . Les opérateurs sont du sucre syntaxique pour les fonctions et fonctionnent sur des variables (valeurs) non des types.


2 commentaires

Il est logique que vous avez une sorte de classe de services publics - avec seulement des membres statiques - qui charge quelque chose à "lui-même", qui souhaiterait alors accéder de la manière la plus simple - à l'aide de l'opérateur comme [] .


Oui, ajout au commentaire de @ jave.Web: cela peut certainement avoir un sens dans les cas quand il y a des données dans la portée statique de la classe. (L'OP mentionne également l'étendue statique explicitement.) Donc, pas avec des arithmétiques simples, comme dans votre exemple, mais des trucs comme [], (), <<, >> Syntaxe Sugar pour toute sorte de gestionnaire complexe classes aussi, sans forcer une instance singleton.



5
votes

Je ne crois pas que ce soit possible, même si je pouvais me tromper sur ce front. J'aimerais demander pourquoi vous voudriez faire cela. Plutôt que d'effectuer des opérations sur une classe au lieu d'instances, vous avez peut-être besoin d'une instance dans votre application? Dans ce cas, vous devriez probablement utiliser Le modèle Singleton .


1 commentaires

J'avais l'habitude d'utiliser le motif singleton comme fou, mais ensuite arrêté parce que le code Singleton est tellement tracas pour écrire des tests pour.



1
votes

Non, les opérateurs ne peuvent pas être des membres statiques d'une classe. Utilisez une fonction statique régulière à la place.


0 commentaires

14
votes

Si vous recherchez des métaprogramming à l'aide de l'opérateur intégré: une telle chose n'est pas possible - les opérateurs intégrés fonctionnent sur des valeurs d'exécution et non sur les valeurs de temps de compilation.

Vous pouvez utiliser Boost :: mpl pour cela, et au lieu d'utiliser les opérateurs intégrés, utilisez ses modèles, tels que à pour op [] , Plus pour op + etc. xxx


0 commentaires