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

Déduction d'argument template

3 réponses
Avatar
plagne.laurent
Bonjour,

j'ai un petit doute sur le code suivant. Je ne sais pas si c'est l=E9gal
et mal =E9crit (manque un template quelque part) ou ill=E9gal. La
fonction 1 correspond un peu =E0 mon pb original, et la fonction 2
permet de reproduire le pb sans faire r=E9f=E9rence aux map.

#include <iostream>
#include <map>

template < class DataType >
DataType fonction1(typename std::map<int,DataType>::const_iterator &
it1)
{
std::cout << "ok 1" << std::endl;
}

template <class T>
struct A{
typedef T * const_iterator;
};

template < class DataType >
DataType fonction2(const typename A<DataType>::const_iterator & it1)
{
std::cout << "ok 2" << std::endl;
}

int main() {

// std::map<int,double>::const_iterator it;
// fonction1(it);

A<int>::const_iterator tutu;
fonction2(tutu);
};

Des suggestions ?

Laurent

3 réponses

Avatar
Jean-Marc Bourguet
"" writes:

Bonjour,

j'ai un petit doute sur le code suivant. Je ne sais pas si c'est légal
et mal écrit (manque un template quelque part) ou illégal. La
fonction 1 correspond un peu à mon pb original, et la fonction 2
permet de reproduire le pb sans faire référence aux map.


À mon avis c'est un contexte non déductible.

template <class T>
struct A{
typedef T * const_iterator;
};

template < class DataType >
DataType fonction2(const typename A<DataType>::const_iterator & it1)
{
std::cout << "ok 2" << std::endl;
}

int main() {

// std::map<int,double>::const_iterator it;
// fonction1(it);

A<int>::const_iterator tutu;
fonction2(tutu);
};

Des suggestions ?


fonction2<int>(tutu);

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
"" writes:

| Bonjour,
|
| j'ai un petit doute sur le code suivant. Je ne sais pas si c'est légal
| et mal écrit (manque un template quelque part) ou illégal. La
| fonction 1 correspond un peu à mon pb original, et la fonction 2
| permet de reproduire le pb sans faire référence aux map.

salut Laurent,

|
| #include <iostream>
| #include <map>
|
| template < class DataType >
| DataType fonction1(typename std::map<int,DataType>::const_iterator &
^^^^^^^^^^^

C'est un context non-déducible.

-- Gaby
Avatar
plagne.laurent
Gabriel Dos Reis wrote:
"" writes:

| Bonjour,
|
| j'ai un petit doute sur le code suivant. Je ne sais pas si c'est légal
| et mal écrit (manque un template quelque part) ou illégal. La
| fonction 1 correspond un peu à mon pb original, et la fonction 2
| permet de reproduire le pb sans faire référence aux map.

salut Laurent,

|
| #include <iostream>
| #include <map>
|
| template < class DataType >
| DataType fonction1(typename std::map<int,DataType>::const_iterator &
^^^^^^^^^^^

C'est un context non-déducible.

-- Gaby


Merci pour votre aide. Vous avez dissipé mes doutes.
il semble que les iterator_traits permettent de contourner le
problème.

Laurent