Template Funzioni e modelli di funzioni in C ++

7

Mi sono imbattuto in una domanda che chiedeva la differenza tra i modelli di funzione e le funzioni dei modelli in C ++ e anche Classi di modelli e Modelli di classe.

Ho avuto l'impressione che i modelli di funzione e le funzioni di template fossero la stessa cosa. C'è qualche differenza tra i due, se è così?

    
posta nikhil 27.11.2011 - 12:50
fonte

6 risposte

4

Is there any difference between the two, if so what is it?

Nessuna differenza. Se google per esso , lo puoi vedere da qualche parte è definito come modelli di funzioni e da qualche parte come funzione modello .

I was under the impression that Function Templates and Template Functions were the same thing.

La tua comprensione era corretta.

    
risposta data 27.11.2011 - 13:23
fonte
10

Esiste una differenza tra il modello di funzione e la funzione di modello.

template<class Type>
void Foo(Type tData) {...}

se volessi passare int a function template Foo, ma volevi anche che il compilatore lo istanziasse come se fosse passato un double che chiameresti:

Foo<double> ( 12 );

Che istanzia la seguente funzione modello:

void Foo(double);

Con questa sintassi speciale Foo<>() , stai richiedendo al compilatore di istanziare la funzione Foo per il tipo che viene passato esplicitamente e chiedendo al compilatore di non dedurre l'argomento tipo per funzione.

Un modello di funzione è il corpo di una funzione tra parentesi attorno alla parola chiave template, che non è una funzione effettiva e non verrà compilata completamente dal compilatore e non è responsabile dal linker. Almeno una chiamata, per particolari tipi di dati, è necessaria per istanziarla ed essere messa in conto del compilatore e del linker. Pertanto, l'istanza del modello di funzione Foo viene istanziata come Foo (int) o Foo (doppio).

Una funzione del modello è semplicemente una "istanza di un modello di funzione", che viene prodotta quando la chiami o che viene creata un'istanza per un particolare tipo di dati. L'istanza del template funzione è in realtà una funzione valida.

Un'istanza di un template funzione (alias template-function) non è una funzione normale, sotto l'ombrello del sistema name-decoration del compilatore e del linker. Ciò significa, un'istanza di template di funzioni:

template<class T> 
void Foo(T data) {...}

per l'argomento modello double, non lo è:

void Foo(double data) {...}

ma in realtà:

void Foo<double>(double x) {...}

Puoi leggere di più qui:

Termini del modello

Tutorial modello

    
risposta data 29.11.2013 - 17:48
fonte
3

classe template è un termine che non dovrebbe essere usato, usato per designare ciò che chiamiamo ora una specializzazione template di classe poiché almeno lo standard 98, ma la maggior parte le persone che lo usano tendono a usarlo come sinonimo di modello di classe (e questo era vero anche in passato, quindi l'introduzione di un altro termine non ambiguo).

Dal manuale di riferimento Annotated C ++ (Ellis and Stroustrup, 1990):

A class template specifies how individual classes can be constructed.

A class generated from a class template is called a template class.

    
risposta data 28.11.2013 - 17:52
fonte
1

Sono la stessa cosa Lo Standardese è "modello di funzione" e "modello di classe", tuttavia molte persone (me compreso) tendono a riferirsi ad esse come "funzione modello" e "modello di classe", per il semplice ed ovvio motivo per cui quando ne definite uno, per prima cosa scrivi "template" e poi scrivi "class" o una funzione. Quindi, sono spesso indicati come entrambi.

    
risposta data 27.11.2011 - 13:59
fonte
-1

C'è una piccola differenza logica tra template fuction e template di funzioni. Il modello di funzione è quello che potrebbe essere utilizzato per creare una famiglia di funzioni con un tipo di argomento diverso. Sintassi- modello              tipo di ritorno nome_funzione (argomenti
             di tipo T)              {......               } Una funzione generata da un modello di funzione è chiamata funzione template.

    
risposta data 13.05.2016 - 05:36
fonte
-2
template <class T> T abs(T n) //function template
{ 
    return (n<0) ? -n : n; 
}

int main()
{
    int int1 = -10;
    cout << “\nabs(“ << int << “)=” << abs(int1);  //calling the abs function for type int 
}

Quando il compilatore vede una chiamata a una funzione, sa che il tipo da usare è int perché è il tipo dell'argomento int1 . Quindi genera una versione specifica della funzione abs() per il tipo int , sostituendo int ogni volta che vede il nome T nel modello di funzione.

Si chiama istanziazione del modello di funzione e ogni versione istanziata della funzione è chiamata funzione template. Cioè, una funzione template è un'istanza specifica di un template funzione

    
risposta data 28.11.2013 - 17:28
fonte

Leggi altre domande sui tag