適切な特別な値は、デフォルトで構築されたものである可能性がありますboost::function
。
空function
はブールコンテキスト(NULLポインターなど)でfalseと評価されます。または、empty()
メソッドを使用して、関数オブジェクトラッパーに実際に関数が含まれているかどうかをテストできます。boost::functionチュートリアルを参照してください。
コードサンプルは次のとおりです。
#include <boost/function.hpp>
#include <iostream>
typedef boost::function<void (int code)> t_err_callback;
void do_callback(int code)
{
std::cout << "Error " << code << std::endl;
}
void my_func(int a, int b, t_err_callback err_callback=t_err_callback())
{
bool error = true; // An error happened
int error_code = 15; // Error code
if (error && !err_callback.empty())
err_callback(error_code);
}
int main()
{
my_func(0, 0);
my_func(0, 0, do_callback);
}