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

Spécialisation partielle de fonctions impossible

12 réponses
Avatar
Benoit Dejean
mon compilateur s'y refuse et je n'arrive pas à trouver de référence
l'expliquant. est ce mon compilateur ou y a t il une bonne raison qui fait
que cela n'est pas possible/permis avec les fonctions à contrario des
classes?

10 réponses

1 2
Avatar
Gabriel Dos Reis
Benoit Dejean writes:

| mon compilateur s'y refuse et je n'arrive pas à trouver de référence
| l'expliquant. est ce mon compilateur ou y a t il une bonne raison qui fait
| que cela n'est pas possible/permis avec les fonctions à contrario des
| classes?

La spécialisation partielle des fonctions templates n'existe
pas. C'est comme ça.
Si tu veux spécialiser partiellement, utilise quelque chose que tu
peux, i.e. une classe template.

-- Gaby
Avatar
Benoit Dejean
Le Thu, 04 Sep 2003 22:35:17 +0200, Gabriel Dos Reis a écrit :

Benoit Dejean writes:

[texte cité caché]


La spécialisation partielle des fonctions templates n'existe
pas. C'est comme ça.


et y a t il une raison valable ?

Si tu veux spécialiser partiellement, utilise quelque chose que tu
peux, i.e. une classe template.


ce que je fais

-- Gaby



Avatar
Gabriel Dos Reis
Benoit Dejean writes:

| Le Thu, 04 Sep 2003 22:35:17 +0200, Gabriel Dos Reis a écrit :
|
| > Benoit Dejean writes:
| >
| >> [texte cité caché]
| >
| > La spécialisation partielle des fonctions templates n'existe
| > pas. C'est comme ça.
|
| et y a t il une raison valable ?

à part que la norme le dit ?

-- Gaby
Avatar
Julien Blanc
Gabriel Dos Reis wrote:
Benoit Dejean writes:

|
| > Benoit Dejean writes:
| >
| >> [texte cité caché]
| >
| > La spécialisation partielle des fonctions templates n'existe
| > pas. C'est comme ça.
|
| et y a t il une raison valable ?

à part que la norme le dit ?


et une raison valable au fait que la norme le dit ;) ?

je suppose que quelque part le compilateur pourrait se retrouver avec
deux spécialisations partielles candidates pour une expression, et aucun
critère de choix, mais je ne comprends pas pourquoi c'est possible pour
une classe mais pas une fonction (je suppose qu'il y'a quelque chose qui
m'échappe sur les différences entre fonctions et classes template).

--
Julien Blanc. Equipe cadp. VERIMAG. Grenoble. France.

Avatar
Alain Migeon
In article ,
says...
Benoit Dejean writes:

| mon compilateur s'y refuse et je n'arrive pas à trouver de référe nce
| l'expliquant. est ce mon compilateur ou y a t il une bonne raison qui f ait
| que cela n'est pas possible/permis avec les fonctions à contrario des
| classes?

La spécialisation partielle des fonctions templates n'existe
pas. C'est comme ça.
Si tu veux spécialiser partiellement, utilise quelque chose que tu
peux, i.e. une classe template.


Est-ce que le code suivant est conforme à la norme. J'utilise dans un
map, une déclaration incomplète d'une struct : A.

//-----------------------------
#include <map>
using std::map;
using std::less;

struct A;

typedef map <int, A, less <int> > MapA;

struct B
{
MapA::iterator itMapA;
};

typedef map <int, B, less <int> > MapB;

struct A
{
MapB::iterator itMapB;
};

int main ()
{
return 0;
}
//-----------------------------

Sous VC6, il ne compile pas avec la STL de Dinkumware, mais par contre,
STLport l'accepte.

Voilà l'erreur retournée par VC6, avec la STL de Dinkumware.

d:program filesmicrosoft visual studiovc98includeutility(26) :
error C2079: 'second' uses undefined struct 'A'
d:program filesmicrosoft visual studiovc98includextree(42)
: see reference to class template instantiation 'std::pair<int const
,struct A>' being compiled
d:program filesmicrosoft visual studiovc98includemap(46) :
see reference to class template instantiation 'std::_Tree<int,struct
std::pair<int const ,struct A>,struct std::map<int,struct A,struct
std::less<int>,class std::allocator<struc
t A> >::_Kfn,struct std::less<int>,class std::allocator<struct A> >'
being compiled
e:devtesttest_maptest_map.cpp(10) : see reference to class
template instantiation 'std::map<int,struct A,struct std::less
<int>,class std::allocator<struct A> >' being compiled


Alain

Avatar
Julien Blanc
Gabriel Dos Reis wrote:
Julien Blanc writes:

| mais je ne comprends pas pourquoi c'est
| possible pour une classe mais pas une fonction (je suppose qu'il y'a
| quelque chose qui m'échappe sur les différences entre fonctions et
| classes template).

jusqu'à nouveau désordre, on ne surcharge pas les classes il me semble.


Certes. Mais quel est le rôle de la surcharge dans tout ça ?

Parce que si j'ai

template <class T> foo { T elem };

foo<int> et foo<double> sont deux type différents à tous égards.

mais si j'ai une fonction template
template<class T> int foo(T elem) {..};

dois-je comprendre que foo<int>(int) est une surcharge de
foo<double>(double) ?, et pas une fonction différente à tous points de vue ?

--
Julien Blanc. Equipe cadp. VERIMAG. Grenoble. France.

Avatar
Gabriel Dos Reis
Julien Blanc writes:

| Gabriel Dos Reis wrote:
| > Julien Blanc writes:
|
| > | mais je ne comprends pas pourquoi c'est
| > | possible pour une classe mais pas une fonction (je suppose qu'il y'a
| > | quelque chose qui m'échappe sur les différences entre fonctions et
| > | classes template).
| > jusqu'à nouveau désordre, on ne surcharge pas les classes il me
| > semble.
|
| Certes. Mais quel est le rôle de la surcharge dans tout ça ?

tu veux que je refasses le débat passé ici ?

| Parce que si j'ai
|
| template <class T> foo { T elem };
|
| foo<int> et foo<double> sont deux type différents à tous égards.

Yep.

| mais si j'ai une fonction template
| template<class T> int foo(T elem) {..};

ajoute

template<class T> void foo(T* p, const T& = T()) { }

-- Gaby
Avatar
Julien Blanc
Gabriel Dos Reis wrote:

tu veux que je refasses le débat passé ici ?


non :). J'irai chercher dans les archives si le problème me tarabuste
encore. Et je crois avoir à peu près compris, merci de tes pistes.

--
Julien Blanc. Equipe cadp. VERIMAG. Grenoble. France.

Avatar
Christophe Lephay
"Gabriel Dos Reis" a écrit dans le message de
news:
Julien Blanc writes:
Certes. Mais quel est le rôle de la surcharge dans tout ça ?
tu veux que je refasses le débat passé ici ?



Ou juste en rappeler la conclusion ?

Chris


Avatar
Gabriel Dos Reis
--=-=- Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

"Christophe Lephay" writes:

| "Gabriel Dos Reis" a écrit dans le message de
| news:
| Julien Blanc writes:
| >> Certes. Mais quel est le rôle de la surcharge dans tout ça ?
| >tu veux que je refasses le débat passé ici ?
|
| Ou juste en rappeler la conclusion ?

--=-=- Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: quoted-printable


Si je me souviens bien, il n'y a pas eu de conlucion acceptée par les
deux parties :-) Il y a eu des tentatives de propositions qui sont
restéea lettre morte.

[Entre temps, ma compréhension des templates a progressé ainsi que ma
conviction :-)]

--=-=-=--
1 2