Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question de vocabulaire sur les templates

11 réponses
Avatar
Aurélien REGAT-BARREL
Bonjour à tous,
Je me pose des questions sur le(s) sens de instancié / spécialisé pour un
template.
Quand je fais ça :
std::vector<int> v;
Est-ce que std::vector est instancié pour le type int, ou est-il spécialisé
par le compilo ?
Et dans l'exemple suivant :

template<typename T>
T Test()
{
return T();
}

void f()
{
int i = Test<int>();
}

Diriez-vous qu'il y a instanciation explicite de Test ?
Merci.

--
Aurélien REGAT-BARREL

10 réponses

1 2
Avatar
Jean-Marc Bourguet
"Aurélien REGAT-BARREL" writes:

Est-ce que std::vector est instancié pour le type int, ou est-il spécialisé
par le compilo ?


Avatar
Jean-Marc Bourguet
"Aurélien REGAT-BARREL" writes:

Est-ce que std::vector est instancié pour le type int, ou est-il spécialisé
par le compilo ?


Les deux.

Pour les noms, il y a une différence:

L'instantiation c'est le processus,
La spécialisation c'est le résultat.

Pour les verbes je n'en vois pas.

A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Gabriel Dos Reis
Jean-Marc Bourguet writes:

| "Aurélien REGAT-BARREL" writes:
|
| > Est-ce que std::vector est instancié pour le type int, ou est-il spécialisé
| > par le compilo ?
|
| Les deux.
|
| Pour les noms, il y a une différence:
|
| L'instantiation c'est le processus,
| La spécialisation c'est le résultat.
|
| Pour les verbes je n'en vois pas.

Dans

template<> struct vector<foo*> { };

est-ce « instancier » ou « specialiser » ?

-- Gaby
Avatar
drkm
Jean-Marc Bourguet writes:

L'instantiation c'est le processus,
La spécialisation c'est le résultat.


Tiens. Je pensais que la spécialisation c'était :

template< bool B >
struct If {
typedef True value ;
} ;

template<>
struct If< false > {
typedef False value ;
} ;

--drkm

Avatar
Jean-Marc Bourguet
drkm writes:

Jean-Marc Bourguet writes:

L'instantiation c'est le processus,
La spécialisation c'est le résultat.


Tiens. Je pensais que la spécialisation c'était :

template< bool B >
struct If {
typedef True value ;
} ;

template<>
struct If< false > {
typedef False value ;
} ;


C'est une specialisation explicite.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Aurélien REGAT-BARREL
Merci pour les réponses.

C'est une specialisation explicite.


Est-ce que ça aussi c'est une spécialisation explicite ?

template<typename T>
T Test()
{
return T();
}

void f()
{
int i = Test<int>();
}


--
Aurélien REGAT-BARREL

Avatar
Gabriel Dos Reis
"Aurélien REGAT-BARREL" writes:

| Merci pour les réponses.
|
| > C'est une specialisation explicite.
|
| Est-ce que ça aussi c'est une spécialisation explicite ?
|
| template<typename T>
| T Test()
| {
| return T();
| }
|
| void f()
| {
| int i = Test<int>();
| }

Non, c'est une demande d'instantiation implicite.

-- Gaby
Avatar
Aurelien REGAT-BARREL
Non, c'est une demande d'instantiation implicite.


Qui si j'ai bien compris peut provoquer une spécialisation de la part du
compilo ?

Avatar
drkm
"Aurelien REGAT-BARREL" writes:

Non, c'est une demande d'instantiation implicite.


Qui si j'ai bien compris peut provoquer une spécialisation de la part du
compilo ?


Qui, si j'ai bien compris, nécessite l'existence d'une
spécialisation. Ce qui peut évuentuellement déclencher une
instanciation. La spécialisation sera alors créée à partir du modèle
initial, ou d'une spécialisation partielle.

À confirmer.

--drkm


Avatar
Gabriel Dos Reis
drkm writes:

| "Aurelien REGAT-BARREL" writes:
|
| >> Non, c'est une demande d'instantiation implicite.
|
| > Qui si j'ai bien compris peut provoquer une spécialisation de la part du
| > compilo ?
|
| Qui, si j'ai bien compris, nécessite l'existence d'une
| spécialisation. Ce qui peut évuentuellement déclencher une
| instanciation. La spécialisation sera alors créée à partir du modèle
| initial, ou d'une spécialisation partielle.
|
| À confirmer.

Oui.

-- Gaby
1 2