簡體   English   中英

在C ++中將帶有或不帶有參數的函數作為參數傳遞

[英]Pass function with or without argument as argument in C++

我想將不帶參數的void函數或帶參數的void函數傳遞給構造函數作為參數。 像這樣:

DailyActivity activity1(&function1)

要么

DailyActivity activity2(&function2(uint_t 1))

調用DailyActivity::run()時應觸發傳遞的函數。

DailyActivity的標頭如下所示:

class DailyActivity {
  typedef void (*function_type)();

  public:
    DailyActivity(void (*f)());
    virtual void run();

  private:
    function_type m_function;
};

構造函數和run()函數如下所示:

DailyActivity::DailyActivity(void (*f)()) : m_function((*f)) {
}

DailyActivity::run() {
  m_function();
}

但是我無法(1)以正確的方式定義typedef以使兩個不同的函數都可以被接受,並且(2)無法成功傳遞參數o function2。

你不能那樣做。 不幸的是,C ++無法處理部分函數,​​因此您必須重載構造函數以將函數和參數都當作兩個單獨的參數,將第二個參數當作無參數的對象。 然后,您將擁有兩個函數指針,其中之一應為null。

另一種選擇是將函數包裝到lambda中。

您可以將std::functionlambdastd::bind

class DailyActivity {
  public:
    explicit DailyActivity(std::function<void ()> f) : m_function(f) {}
    void run() { m_function(); }

  private:
    std::function<void ()> m_function;
};

並稱之為

DailyActivity activity1(&function1);
DailyActivity activity2([](){function2(1);});

現場例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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