Estoy tratando de encontrar una solución para tener literales numéricos constantes dentro del método de clase de plantilla. Estoy haciendo algunas clases de plantillas matemáticas para usar con tipos flotantes o dobles. El problema es que los literales son diferentes según el tipo de datos (por ejemplo, "0.5f" para flotar y "0.5" para el doble). Hasta ahora, se me ocurren dos soluciones. Parte del código hipotética de primera:Especialización de funciones en clase de plantilla para literales float y dobles
template <typename T>
class SomeClass
{
public:
T doSomething(T x);
};
template <>
float SomeClass<float>::doSomething(float x)
{
float y = 0.5f;
/*
* Do computations...
*/
return x;
}
template <>
double SomeClass<double>::doSomething(double x)
{
double y = 0.5;
/*
* Do computations...
*/
return x;
}
El enfoque anterior fuerzas reescritura métodos integrales para cada tipo se utiliza con.
Otro enfoque:
template <typename T>
class SomeClass
{
public:
T doSomething(T x);
private:
T getValue();
};
template <typename T>
T SomeClass<T>::doSomething(T x)
{
T y = getValue();
/*
* Do computations...
*/
return x;
}
template <>
float SomeClass<float>::getValue()
{
return 0.5f;
}
template <>
double SomeClass<double>::getValue()
{
return 0.5;
}
Ésta no exige a escribir mismos métodos múltiples veces para el tipo específico, pero requiere tener una gran cantidad getValue() métodos para cada "número mágico" que necesitan ser utilizado dentro del método.
¿Hay alguna otra forma "más elegante" de resolver esto?
Si sólo está a literales, creo que se puede utilizar de fundición static_cast() –
Mohammad
que no he mencionado en mi pregunta, pero me gustaría evitar cualquier conversión, explícitas ni implícitas ni. – umebe