[英]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::function
與lambda
或std::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.