Esiste un sottile trucco per la specializzazione dei modelli in modo che io possa applicare una specializzazione a basic POD
(quando dico POD di base non desidero particolarmente struct POD (ma lo prenderò)).Template Specialization for basic POD only
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
template<>
struct DoStuff</*SOme Magic*/>
{
void operator()() { std::cout << "POD Type\n";}
};
Oppure devo scrivere specializzazioni per ciascuno dei tipi integrati?
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";}
};
Test unità.
int main()
{
DoStuff<int> intStuff;
intStuff(); // Print POD Type
DoStuff<std::string> strStuff;
strStuff(); // Print Generic
}
Ok, sono curioso - Che tipo di "roba" vuoi fare che l'implementazione non faccia già in modo diverso per i tipi di POD? –
Sto usando boost :: mpl. Per oggetti di classe ho bisogno di registrare un'azione che manipola l'oggetto classe (e registra le azioni per tutti i suoi membri). Per gli oggetti POD normali ho un'azione molto più semplice che verrà registrata per eseguire l'azione sull'oggetto. –