I crearon dos funciones simples que obtienen parámetros de plantilla y un struct vacío definir un tipo:¿Por qué la deducción del argumento de la plantilla no funciona aquí?
//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;
}
el tipo de argumento se aplica a la struct S para obtener la referencia. Yo los llamo con algunos valores enteros pero el compilador no puede deducir los argumentos:
int main()
{
char c=6;
int d=7;
int res = temp(c);
int res2 = temp2(d,7);
}
de error 1 error C2783: 'Un temperatura (S :: tipo)': no se pudo deducir argumento de plantilla para 'a'
de error 2 error C2783: 'B temp2 (S :: tipo, B)': no podía deduce argumento de plantilla para 'a'
¿Por qué está pasando esto? ¿Es tan difícil de ver que los argumentos de la plantilla son char y int valores?
bienvenido a SO. y +1 :) –
Edité la cita por un tiempo. Primero, entonces +1 :) –