assert() und Templates
-
Arcoth schrieb:
Du übergibst an das Makro
assertzwei Argumente:IsKBNK<MEundYOU>(p)....was daran liegt, dass Makros kein C++ können und somit die Templatesyntax nicht kennen.
-
assert((IsKBNK<ME, YOU>(p)));sollte es auch tun.
-
Stimmt, bei der Übergabe von nur einem Template-Argument kompiliert es anstandslos.
Danke!
-
Andere Lösung:
assert((IsKBNK<ME, YOU>(p))); // Edit: Die Lösung kam zu spät.Oder ein kleiner Trick, pack das in eine Headerdatei:
inline void bassert( bool b ) { assert(b); }(alles ungetestet)
-
TyRoXx schrieb:
assert((IsKBNK<ME, YOU>(p)));sollte es auch tun.
nein.
-
oh, ich habs eben getestet mit dem onlinecompiler und die lösung mit den klammern geht überraschenderweise. nehme meine aussage oben zurück.
-
Arcoth schrieb:
Oder ein kleiner Trick, pack das in eine Headerdatei:
inline void bassert( bool b ) { assert(b); }(alles ungetestet)
Man verliert die Fileinformationen (die viele Compiler hilfreiche anfügen), wo das assert fehlgeschlagen ist.
-
Arcoth schrieb:
Oder ein kleiner Trick, pack das in eine Headerdatei:
inline void bassert( bool b ) { assert(b); }Damit wirfst du aber viele nette Features von
assertüber Bord, z.B. die Ausgabe des Fehler-Ausdrucks und der Codezeile. Es hat schon einen Grund, wiesoassertein Makro ist...
-
Dann bleiben nur zwei vernünftige Lösungen übrig:
assert((IsKBNK<ME, YOU>(p)));oder
assert((IsKBNK<ME>(p)));... und YOU parametrisieren.
bool temp = IsKBNK<ME, YOU>(p); assert(temp);wäre auch nicht optimal, da im Release Modus aktiv (Ich meide #ifdefs im Code, wenn möglich).
-
Man verliert die Fileinformationen (die viele Compiler hilfreiche anfügen), wo das assert fehlgeschlagen ist.
Ganz vergessen, tut mir Leid. Schlecht geschlafen, ihr versteht.

Na gut:
#define vassert(...) assert((__VA_ARGS__))
-
asfsdas schrieb:
oh, ich habs eben getestet mit dem onlinecompiler und die lösung mit den klammern geht überraschenderweise. nehme meine aussage oben zurück.
Mich überrascht dass es dich überrascht.
Wieso sollte es nicht gehen? Klar geht das.