Ich möchte ein Makro schreiben, das, wenn es innerhalb einer Klasse erweitert wird, diesen Klassentyp verwendet (speziell als Vorlageargument). Innerhalb Klassenmethode, kann ich diese verwenden:C++ - Gibt es Möglichkeiten, den aktuellen Klassentyp mit invarianter Syntax zu erhalten?
#define METHOD_MACRO int sample_method(void)const {\
return template_struct<this_type<decltype(this)>::type>::index;}
(this_type ist mein struct, hier ist es gleichbedeutend mit remove_pointer<remove_const<T>>
)
Aber wenn ich brauche Klassentyp außerhalb des Verfahrens (für typedef für Klasse Elementzeiger), this
Schlüsselwort ist nicht verfügbar; Ich habe versucht, auto
für einen Trick mit dem Ableiten des Typs zu verwenden, aber kein Glück hier. Klassen in Frage werden von meiner Klasse geerbt, wenn dies hilfreich sein kann. Ich möchte vermeiden, dass jemand, der mein Makro verwendet, typdedef
schreiben muss.
Irgendwelche Ideen?
Verwenden Sie CRTP? Vielleicht können Sie Makros ganz eliminieren ... –
Dies erfordert explizite Bemühungen des Benutzers, die ich so oft wie möglich vermeiden möchte. Interessante Idee, aber nicht ganz da. – Abstraction
@Abstraction Das Eingeben des Namens Ihres Makros erfordert vom Benutzer so viel explizite Anstrengung wie das Erben von einer Klasse mit CRTP :) – Drax