template parameter mit #if abfragen?
-
Hallo,
mal wieder eine Frage von mir:
Ist es möglich in einem templatetemplate<int flag>die durch flag definierte variable in einer #if anweisung zu nutzen
wenn ich das template beispielsweise so definieren würde... mytemp<0> temp; ... //im template code #if flag=0 dosomething(); #endif
-
Nein, der Präprozessor kommt lange vor dem Compiler dran. Was hast du vor? Klingt so, als suchtest du Templatespezialisierungen. Oder auch einfach ein gutes altes if. Denn da der Templateparameter eine Compilezeitkonstante ist, kann ein
if(flag == 0)komplett wegoptimiert werden
-
ja, tatsächlich sollte das template bei bestimmten parametern anders arbeiten.
Ich wollte entgegen der althergebrachten get- set- accessoren eher ein c# ähnliches modell einbauen und bei setzen eines flags 'get' bzw. 'set' eben die entsprechenden methoden erzeugen.
-
-
Pria schrieb:
Ich wollte entgegen der althergebrachten get- set- accessoren eher ein c# ähnliches modell einbauen und bei setzen eines flags 'get' bzw. 'set' eben die entsprechenden methoden erzeugen.
Dann willst du Partielle Template Spezialisierung / Partial Template Specialization.
Damit solltest du eniges Googlen können.
-
Vielen Dank!
Ich habe das Problem nun folgendermaßen gelöst und es klappt sehr gut.
template<typename T, AccessorFlag::TYPE flag> struct accessor {}; template<typename T> struct extx accessor<T,AccessorFlag::Get> ... template<typename T> struct extx accessor<T,AccessorFlag::Set> ... etc.