如果嵌入在boost::bind
返回对象中的函数指针是NULL
// nullptr
,0
我需要采取行动而不是调用它。如何确定对象是否包含空函数指针?
附加物
- 我不相信我可以使用和比较
boost::function
s,因为boost::bind
返回对象在模板函数中与不同的调用签名一起使用。 - 简化示例:
template <typename BRO> Retval do_stuff(BRO func, enum Fallback fallback) { if (func == NULL) { return do_fallback(fallback); } else { return use_retval(func()); } } do_stuff(boost::bind(FuncPtrThatMightBeNull, var1, var2), fallback);
解决方案
由于被调用者中函数的数量不变,我可以将绑定返回对象“强制转换”为 aboost::function
并调用.empty()
Retval do_stuff(boost::function<Retval()> func, enum Fallback fallback)
{
if (func.empty())
return do_fallback(fallback);
else
return use_retval(func());
}