0xb*_*00d 3 c++ templates functor
给定这样的函数:
template<typename functor>
void foo(functor const& f)
{
if (f)
f(1, 2);
}
Run Code Online (Sandbox Code Playgroud)
我希望能够分配一个默认值,其中f可以设置为类似的东西NULL.此外,对空函数进行虚假调用也是可能的.有没有什么我可以使用(从标准或boost图书馆),而不是自己创造这样的东西?
使用空仿函数并将其用作默认模板参数.因为没有指针,所以不能使用NULL之类的东西:
class X
{
void operator()(...) {}
};
template <typename functor = X>
void foo(functor const& f = X())
{
f(...);
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是创建一个不带参数的重载:
template<typename functor>
void foo()
{
}
Run Code Online (Sandbox Code Playgroud)
如果默认操作取决于模板参数,则您必须显式提供它,因为编译器无法从中推断出它。如果没有,那么您甚至不需要将其设为模板。