簡體   English   中英

boost :: function參數的默認值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM