Per questo particolare progetto, non sono in grado di utilizzare le funzionalità di C++ 11 (ad esempio decltype
) perché il compilatore non le supporta ancora. Ho bisogno di essere in grado di fornire la classe corrente come parametro di template, preferibilmente all'interno di una macro senza un argomento (vedi sotto), senza vestire la dichiarazione class
o nascondere graffe, eccCome posso recuperare il tipo della classe base in C++?
class Foo: private Bar<Foo> {
MAGIC //expands to using Bar<Foo>::Baz; and some others
public:
void otherFunction();
//... the rest of the class
};
Idealmente, I Mi piacerebbe che funzionasse molto come la macro di Qt Q_OBJECT
, ma senza introdurre un altro passo di pre-compilazione e classi generate associate. typeid
potrebbe essere utile in fase di esecuzione, ma il mio obiettivo è quello di realizzare tutto questo al momento della compilazione.
Come si scrive la macro MAGIC
in modo che non sia necessario ripetere il nome della classe ogni volta?
Questa domanda sembra essere la versione C++ 03 di "[Posso implementare un tipo di membro autonomo' self' in C++?] (http://stackoverflow.com/q/21143835/ 560648) " –
Mente se cambio il titolo in * base clase *? * racchiudere la classe * fa sembrare che tu stia nidificando e quale sia il tipo fuori dalla classe esterna. – NathanOliver
La domanda 'self' sembra molto simile, ma non sembra che nessuna delle soluzioni proposte funzioni in C++ 03, come hai notato. Certamente cambia il titolo se lo renderà più chiaro. – multipleinterfaces