Come posso trasferire il codice msvc ++ con nomi non dipendenti nei modelli su Linux?

5

Posso occuparmi del porting delle funzioni dipendenti dalla piattaforma. Ho un problema che i compilatori che ho provato su Linux (clang e g ++) non accettano il seguente codice, mentre il compilatore msvc ++ fa:

template <class T>
class Base {
protected:
    T Value;
};

template <class T>
class Derived : public Base<T> {
public:
    void setValue(const T& inValue){
        Value = inValue;
    }
};

int main(int argc, char const *argv[])
{
    Derived<int> tmp;
    tmp.setValue(0);
    return 0;
}

Errore g ++:

main.cpp: In member function ‘void Derived<T>::setValue(const T&)’:
main.cpp:11:3: error: ‘Value’ was not declared in this scope

Credo che ciò sia dovuto all'uso di un nome non dipendente ( Value ) nella seconda classe. Ulteriori informazioni .

Il problema è che ho una base di codice molto grande, in cui questo tipo di codice viene usato molto spesso. Capisco che è sbagliato quando si guarda lo standard. Tuttavia è molto conveniente non dover scrivere this-> o Base<T>:: di fronte a ogni utilizzo di Value . Anche scrivere using Base<T>::Value; all'inizio della classe derivata è problematico quando si usano ~ 20 membri della classe base.

Quindi la mia domanda è: ci sono compilatori per Linux che consentono questo tipo di codice (con o senza opzioni aggiuntive per il compilatore)? O ci sono piccole modifiche che permetteranno a questo codice di compilare su Linux?

    
posta user352382 30.10.2012 - 14:45
fonte

1 risposta

0

Ho anche postato questa domanda su SO . Dai pochi commenti qui e le risposte là raggiungo la stessa conclusione: devo correggere il mio codice. Aggiungendo la mia risposta in modo da poter contrassegnare questa domanda come accettata / risolta.

    
risposta data 31.10.2012 - 16:45
fonte

Leggi altre domande sui tag