Voglio scrivere una macro che, quando espansa all'interno di una classe, usa quel tipo di classe (in particolare, come argomento del template). All'interno metodo di classe, posso usare questo:C++ - Ci sono modi per ottenere il tipo di classe corrente con la sintassi invariabile?
#define METHOD_MACRO int sample_method(void)const {\
return template_struct<this_type<decltype(this)>::type>::index;}
(this_type è il mio struct, qui è equivalente a remove_pointer<remove_const<T>>
)
Ma quando ho bisogno di tipo di classe al di fuori del metodo (per typedef per il puntatore membro della classe), La parola chiave this
non è disponibile; Ho provato a usare auto
per qualche trucco con tipo deducente, ma senza fortuna qui. Le classi in questione sono ereditate dalla mia classe, se questo può essere di qualche aiuto. Vorrei evitare che nessuno usi la mia macro per scrivere obbligatoriamente typdedef
.
Qualche idea?
Utilizzare CRTP? Forse è possibile eliminare del tutto le macro ... –
Ciò richiede uno sforzo esplicito da parte dell'utente, che cerco di evitare il più possibile. Idea interessante, ma non del tutto lì. – Abstraction
@Abstraction Digitando il nome della tua macro richiede tanto sforzo esplicito da parte dell'utente che ereditare da una classe con CRTP :) – Drax