Klasse an Funktion übergeben. Und auch wieder zurück.
-
Jo, sowas würde ich auch nicht implementieren. Die schönste Möglichkeit wäre es wohl einfach eine instanz auf die struct derived von otze zurückzugeben, dann könnte man beliebige statische funktionen aufrufen, so wie er es in seinem beispiel auch macht, nur eben ausserhalb der klasse.
-
die frage ist nur, wie man an den value_type kommen sollte, immerhin kann man ja von base nicht auf derived casten ohne den template parameter mitzugeben, und einen value_type in base kann man soweit ich weis nicht überschreiben...
wäre intressant, mal deine implementation zu sehen, falls dus schaffen solltest
-
#include <iostream> struct A { static void foo() { std::cout << 'A' << std::endl; } }; struct B : public A { static void foo() { std::cout << 'B' << std::endl; } }; int main() { A *p = new B; p->foo(); delete p; }
Ausgabe:
A
statische Funktionsaufrufe werden zur Compilezeit aufgelöst. Auf die Art kommt ihr nicht weiter.
-
@otze:
Oha, da hab ich garnicht dran gedacht ... Mist
-
da die templateparameter ja eh zur compilezeit ausgewertet werden, und wir darum nichts dynamisches damit zustande bringen könnten,könnten wir das dann nicht alternativ auf einer typliste basieren lassen?
//pseudocode class A{}; class B{}; class C{}; typedef typelist<A,B,C> myClasses; //irgendwo in irgendeiner klasse/funktion getType<myClasses,2>::value_type::static_func();
-
Das kannst du meinetwegen machen, aber es ist bei weitem nicht so mächtig wie eine factory. Es bringt nur dann was, wenn du vorher alle Klassen kennst, die die Factory rausschmeißen soll, und bringt dir also z.B. für Plugin-Architekturen aller Art so rein gar nichts.