別の関数を呼び出してその戻り値を格納し、値を返す前にいくつかの作業を行うテンプレート関数があります。これを拡張して処理したいのですT = void
が、専門化が私の唯一の選択肢であるかどうか疑問に思いました。
template<typename T>
T Foo( T(*Func)() )
{
// do something first (e.g. some setup)
T result = Func();
// do something after (e.g. some tear down)
return result;
}
// Is this specialization the only option?
template<>
void Foo<void>( void(*Func)() )
{
// do something first (e.g. some setup)
Func();
// do something after (e.g. some tear down)
return;
}
void Bar() {}
int BarInt() { return 1; }
int main()
{
Foo<int>(&BarInt);
Foo<void>(&Bar);
}
Foo
または、タイプを処理するように通常のバージョンを変更しvoid
て、その場合は基本的に何もしないでください。私のローカルの結果は、void
多分処理できるタイプにラップできるかもしれないと思っていましたが、その割り当ては取引を破るものと見なすこともできました。