Ist es möglich, C++ - Klassenoperatoren im statischen Kontext zu überladen? z.B.C++ statischer Operator überladen
class Class_1{ ... }
int main()
{
Class_1[val]...
}
Ist es möglich, C++ - Klassenoperatoren im statischen Kontext zu überladen? z.B.C++ statischer Operator überladen
class Class_1{ ... }
int main()
{
Class_1[val]...
}
Wenn Sie nach Metaprogrammierung mit dem integrierten Operator suchen: So etwas ist nicht möglich - die integrierten Operatoren arbeiten mit Laufzeitwerten, nicht mit Kompilierzeitwerten.
Sie boost::mpl
dafür verwenden kann, und stattdessen die integrierten Operatoren zu verwenden, seine Vorlagen verwenden, wie at
für op[]
, plus<a, b>
für op+
usw.
int main() {
using boost::mpl::vector;
using boost::mpl::at_c;
using boost::mpl::plus;
using boost::mpl::int_;
typedef vector<int, bool, char, float> Class_1;
typedef vector< int_<1>, int_<2> > Numeric_1;
at_c<Class_1, 0>::type six = 6;
typedef plus<at_c<Numeric_1, 0>::type
,at_c<Numeric_1, 1>::type>::type r;
int i3[r::value] = { 4, 5, 6 };
return ((i3[0] + i3[1] + i3[2]) * six) == 90;
}
Wenn Sie der Betreiber arbeitet mit einer Klasse bedeuten, das Nein, das nicht sinnvoll ist, ist es wie wenn man sagt operator +
kann Operator auf int
oder double
. Operatoren sind syntaktische Zucker für Funktionen und sie arbeiten auf Variablen (Werte) und nicht auf Typen.
Es macht Sinn, wenn Sie eine Art Utility-Klasse haben - mit nur statischen Membern - die etwas auf "sich selbst" lädt, auf die Sie dann am einfachsten zugreifen möchten - mit dem Operator wie '[]'. –
Ja, zu @ jave.webs Kommentar hinzufügen: es kann sicherlich in Fällen sinnvoll sein * wenn Daten im statischen Bereich * der Klasse sind. (Das OP erwähnt auch den statischen Bereich explizit.) Also nicht mit einfachen Arithmetik, wie in Ihrem Beispiel, aber Sachen wie [],(), <<, >> etc. könnten auch perfekte syntaktische Zucker für jede Art von komplexen Manager-Klassen sein , ohne eine Singleton-Instanz zu erzwingen. –
Ich glaube nicht, dass es möglich ist, obwohl ich an dieser Front falsch liegen könnte. Ich würde gerne fragen, warum Sie das tun sollten. Anstatt Operationen für eine Klasse anstelle von Instanzen auszuführen, benötigen Sie vielleicht nur eine Instanz in Ihrer gesamten Anwendung? In diesem Fall sollten Sie wahrscheinlich the singleton pattern verwenden.
Ich habe das Singleton-Muster wie verrückt benutzt, aber dann aufgehört, weil Singleton-Code so mühsam ist, Tests zu schreiben. – jameszhao00
Nein, Operatoren können keine statischen Member einer Klasse sein. Verwenden Sie stattdessen eine normale statische Funktion.
Sollte 'Class_1 [val]' Ausbeute ein Art? Wie erwarten Sie 'Class_1 [val] v;'? –
Ich wollte es integrale Werte haben, aber Typen sind in Ordnung. – jameszhao00
In C++ können Typen nicht im Typsystem dargestellt werden (es gibt nur 'std :: type_id') und ich kann mir keinen Operator vorstellen, der statisch überladen werden kann. Ich schlage vor, anstatt zu fragen, ob Ihre Implementierungsidee in C++ durchführbar ist, präsentieren Sie das eigentliche Problem, das gelöst werden sollte. Jemand könnte möglicherweise eine durchführbare Implementierung vorschlagen. – sbi