Chiamando il modello di funzione all’interno di un modello di classe

Disclaimer: La seguente domanda probabilmente è così facile che potrebbe essere scioccato di vedere la prima risposta. Inoltre, voglio scusarmi per eventuali domande duplicate – sintattica problemi non sono sempre facili da identificare essere spiegazione verbale e quindi la ricerca non è facile…

Ma abbastanza. Ho due classi basato su modelli, uno di quelli che ha reso disponibili i modelli di una funzione membro, gli altri tentativi di classe per chiamare la funzione. Un minimo errore produzione di esempio è riportato di seguito:

#include <iostream>

template <typename T>
class Foo {
public:
    Foo() {
    }

    template <typename outtype>
    inline outtype bar(int i, int j, int k = 1) {
        return k;
    }

};

template <typename T>
class Wrapper {
public:
    Wrapper() {
    }

    double returnValue() {
        Foo<T> obj;
        return obj.bar<double>(1,2); //This line is faulty.
    }

};

int main() {
    Wrapper<char> wr;
    double test = wr.returnValue();
    std::cout << test << std::endl;
    return 0;
}

In fase di compilazione, questo si traduce in

expected primary-expression before 'double'
expected ';' before 'double'
expected unqualified-id before '>' token

dove tutti i messaggi di errore sono dirette alla linke segnato nel codice.

Ho giá grazie per le tue idee, non importa quanto evidenti sono.

  • Esplicita qualificazione è necessaria a causa della sua impostazione non può essere dedotto. Senza modello si ottiene un errore di sintassi, che sarà percepito < come l’operatore è inferiore a….Vedere anche la lingua autore del punto di vista in “13.6. Stroustrup, spec. edizione. 935-936.”
InformationsquelleAutor Thilo | 2011-09-13

 

3 Replies
  1. 4

    Come spesso accade: una Volta che la domanda è stato pubblicato, la risposta è venuta da sé.
    Correggere l’erronea linea di

    return obj.template bar<double>(1,2);

    produce i risultati previsti.

    Grazie per la lettura…

Lascia un commento