[英]Default value for boost::function argument?
我有一個函數,我想將一個可選的boost :: function參數作為報告錯誤條件的回調。 是否有一些特殊值我可以使用默認值使其可選?
例如,使用常規函數指針,我可以這樣做:
void my_func(int a, int b, t_func_ptr err_callback=NULL) {
if (error && (err_callback != NULL))
err_callback();
}
我可以用boost :: function替換函數指針做類似的事嗎?
您可以使用0
(C ++相當於NULL
)作為boost :: function參數的默認值,這將導致一個空函數對象。 您可以通過調用其empty()
方法,將其與0進行比較,或者僅在布爾上下文中使用它來測試它是否為空:
void my_func(int a, int b, boost::function<void()> err_callback = 0) {
if (error && err_callback) // tests err_callback by converting to bool
err_callback();
}
boost::function
對象在這方面與普通函數指針非常相似。
一個好的特殊值可能是默認構造的boost::function
。
空function
在布爾上下文中評估false(如NULL指針),或者您可以使用empty()
方法來測試函數對象包裝器是否實際包含函數。 請參閱boost :: function Tutorial 。
這是一個代碼示例:
#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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.