我有一个模板函数,它调用另一个函数并存储它的返回值,然后在返回值之前做一些工作。我想将此扩展到处理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
,但也可以将分配视为一个交易破坏者。