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);
解決
呼び出し先の関数のアリティは変わらないので、バインドの戻りオブジェクトを に「キャスト」してboost::function
呼び出すことができます.empty()
Retval do_stuff(boost::function<Retval()> func, enum Fallback fallback)
{
if (func.empty())
return do_fallback(fallback);
else
return use_retval(func());
}