2015-11-02 21 views
6

Sto tentando di accedere a un membro typedef nella classe base dal modello di classe derivata. Nel nome template del parametro template è uguale al nome di typdef nella classe base.Accesso alla classe base typedef nel modello di classe derivata

#include <iostream> 

using namespace std; 
class no { 
    public : 
    typedef int T; 
}; 
template<typename T> class no1 : public no { 
    public : 
    T obj; 
}; 
int main() { 
    // your code goes here 
    no1<string> o ; o.obj = "1"; 
    return 0; 
} 

14:24: error: invalid conversion from 'const char*' to 'no::T {aka int}' [-fpermissive] 
    no1<string> o ; o.obj = "1"; 

Nel codice sopra T è obj è sempre di tipo int. Come posso forzare obj ad essere di parametro template e non typdef dichiarato nella classe base?

Grazie

+0

Non è possibile senza fornire una conversione esplicita da 'T' a' int'. Si noti inoltre che il parametro template 'T' solo _shadows_' no :: T', questi non sono correlati. –

+0

Ecco qual è la mia domanda su come accedere al parametro del modello T senza modificare la classe base o il parametro di ridenominazione del modello? – noname

+0

Ancora, non puoi. –

risposta

0

questo funziona per me:

template<typename T> class no1; 
template<typename T> 
struct underlying_type_of; 

template<typename T> 
struct underlying_type_of<no1<T> > 
{ 
    typedef T type; 
}; 
template<typename T> class no1 : public no { 
public : 
    typename underlying_type_of<no1>::type obj; 
}; 
Problemi correlati