¿Hay algún truco sutil para la especialización de plantillas para poder aplicar una especialización a basic POD
? (Cuando digo POD básico, no quiero particularmente struct POD (pero lo tomaré)).Especialización de plantillas para POD básico solo
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
template<>
struct DoStuff</*SOme Magic*/>
{
void operator()() { std::cout << "POD Type\n";}
};
¿O tengo que escribir especializaciones para cada uno de los tipos incorporados?
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
// Repeat the following template for each of
// unsigned long long, unsigned long, unsigned int, unsigned short, unsigned char
// long long, long, int, short, signed char
// long double, double, float, bool
// Did I forget anything?
//
// Is char covered by unsigned/signed char or do I need a specialization for that?
template<>
struct DoStuff<int>
{
void operator()() { std::cout << "POD Type\n";}
};
Unit Test.
int main()
{
DoStuff<int> intStuff;
intStuff(); // Print POD Type
DoStuff<std::string> strStuff;
strStuff(); // Print Generic
}
Ok, tengo curiosidad - ¿Qué tipo de "cosas" desea hacer que la implementación ya no sea diferente para los tipos de POD? –
Estoy usando boost :: mpl. Para objetos de clase, necesito registrar una acción que manipule el objeto de clase (y registrar acciones para todos sus miembros). Para objetos POD normales, tengo una acción mucho más simple que se registrará para realizar la acción en el objeto. –