basic POD
(私は基本的なPODは特にそういうわけではありませんが、私はそれを取ることにします)に1つの特殊化を適用できるように、テンプレートの特殊化の微妙なトリックがあります。基本的なPODのテンプレートの特殊化
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
template<>
struct DoStuff</*SOme Magic*/>
{
void operator()() { std::cout << "POD Type\n";}
};
また、組み込みの種類ごとに特殊化を記述する必要がありますか?
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";}
};
ユニットテスト。
int main()
{
DoStuff<int> intStuff;
intStuff(); // Print POD Type
DoStuff<std::string> strStuff;
strStuff(); // Print Generic
}
私は好奇心が強いです - 実装がまだPODタイプのために別のことをしていないということを "もの"したいと思っているのですか? –
私はboost :: mplを使用しています。クラスのようなオブジェクトの場合は、クラスオブジェクトを操作するアクションを登録する必要があります(そして、すべてのメンバーのアクションを登録してください)。通常のPODオブジェクトでは、オブジェクトに対してアクションを実行するために登録されるはるかに単純なアクションがあります。 –