2014-05-10 18 views
6

So che un typedef non può essere inoltrato in C++, ma mi chiedo quale potrebbe essere la soluzione migliore per il seguente problema. Ho un file di intestazione che dichiara MyClass come questo:Inoltro che dichiara un typedef per una classe modello

#include <TemplateClassHeaders> 

struct MyStruct 
{ 
    // ... 
} 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass è utilizzato in molti luoghi, ma per lo più solo come un puntatore di essere passato attraverso il meccanismo del segnale slot Qt. Una dichiarazione in avanti sarebbe tutto ciò che è necessario, ma dal momento che MyClass è un typedef che non funzionerà. C'è un modo per evitare di aggiungere myclass.h a ogni intestazione che utilizza un puntatore a MyClass?

+0

'class MyClass;' Google, o anche guardando i suggerite SO link mentre si sta digitando la vostra domanda, dovrebbe rivelare http://stackoverflow.com/questions/804894/forward-declaration-of-a -typedef-in-c? rq = 1 – mah

+1

@mah Dandogli un secondo pensiero o almeno leggendo l'intera domanda invece di ridiscutere automaticamente e indirizzarmi a una domanda simile (senza template e argomenti di template) ti rivelerò che 'classe MyClass' non funzionerà (e non funzionerebbe anche se non sono stati coinvolti modelli, a causa della redeclaration). – jaho

+0

@Marian, 'classe MyClass;' funzionerebbe se non fossero coinvolti modelli. –

risposta

10

Non è possibile inoltrare un typedef. Ma se inoltrerai le classi su cui fa affidamento, sia TemplateClassName e MyStruct, dovresti essere in grado di definire MyClass.

namespace Really { 
    namespace Long { 
    template <typename> 
    class TemplateClassName; 
    } 
} 

class MyStruct; 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass *p = 0; 
+0

Infatti, grazie. – jaho

+0

Questo pasticcio brutto e inutile deve essere risolto. Abbiamo un miliardo di funzionalità più avanzate, ma qualcosa di semplice come "hey, usa questa cosa ** per nome **" è praticamente impossibile: è necessaria una conoscenza interna del tipo _che qualcun altro ha definito_ fondamentalmente ** ricreare ** il typedef! – user362515

Problemi correlati