J'ai créé deux fonctions simples qui obtiennent des paramètres de modèle et une structure vide définissant un type:Pourquoi la déduction d'argument de modèle ne fonctionne-t-elle pas ici?
//S<T>::type results in T&
template <class T>
struct S
{
typedef typename T& type;
};
//Example 1: get one parameter by reference and return it by value
template <class A>
A
temp(typename S<A>::type a1)
{
return a1;
}
//Example 2: get two parameters by reference, perform the sum and return it
template <class A, class B>
B
temp2(typename S<A>::type a1, B a2)//typename struct S<B>::type a2)
{
return a1 + a2;
}
Le type d'argument est appliqué au S struct pour obtenir la référence. Je les appelle avec des valeurs entières mais le compilateur ne peut pas déduire les arguments:
int main()
{
char c=6;
int d=7;
int res = temp(c);
int res2 = temp2(d,7);
}
erreur 1 erreur C2783: 'A température (S :: type)': ne pouvait pas déduire argument modèle pour 'A'
erreur 2 erreur C2783: 'B temp2 (S :: type, B)': ne pouvait pas déduire argument de modèle pour 'A'
Pourquoi cela se produit-il? Est-il si difficile de voir que les arguments du modèle sont char et int valeurs?
bienvenue à SO. et +1 :) –
J'ai édité la citation pendant un certain temps. Vous d'abord, donc +1 :) –