Quiero comprobar si un argumento de plantilla es de tipo de referencia o no en C++ 03. (Ya tenemos is_reference
en C++ 11 y Boost).Comprobando si un argumento de plantilla es una referencia [C++ 03]
Hice uso de SFINAE y el hecho de que no podemos tener un puntero a una referencia.
Aquí está mi solución
#include <iostream>
template<typename T>
class IsReference {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(C*);
template<typename C> static Two test(...);
public:
enum { val = sizeof(IsReference<T>::template test<T>(0)) == 1 };
enum { result = !val };
};
int main()
{
std::cout<< IsReference<int&>::result; // outputs 1
std::cout<< IsReference<int>::result; // outputs 0
}
Cualquier cuestión con ella? ¿Alguien puede proporcionarme una mejor solución? Hace
Para completar puede añadir los casos de prueba de puntero de referencia, es decir, 'IsReference :: result'. –
iammilind