[英]c++ passing functions with variable number of arguments as argument to other function
[英]Passing a function with arguments as an argument in C++ (Arduino)
我想為我的 class 編寫一種包裝器 function ......我真的不知道該怎么做!
看,我想要一個run()
, function 來接受 function 作為參數,這很容易。 用法類似於
void f() { }
void run(int (*func)) {
//whatever code
func();
//whatever code
}
run(f);
那應該只運行f()
function,對吧?
但是如果f()
需要 arguments 怎么辦? 假設它被聲明為f(int i, int j)
,我將 go 重寫run()
function 以分別接受這些int
s,並將它們傳遞給f()
ZC1C425268E683894F1AB457A。
但我希望能夠將 Any function 傳遞給run()
,無論有多少 arguments 或它們是什么類型。 意思是,最后,我希望得到類似於我所期望的假設的用法
void f() {int i, int j}
void v() {char* a, int size, int position}
void run(int (*func)) {
//whatever code
func();
//whatever code
}
run(f(1, 2));
run(v(array, 1, 2));
去做。 我知道這看起來很愚蠢,但我想我已經明白了。
我該怎么做?
請記住,這是 arduino-c++,所以它可能缺少一些東西,但我相信有一些庫可以彌補這一點......
如果您可以訪問std::function
那么您可以使用它:
void run(std::function<void()> fn) {
// Use fn() to call the proxied function:
fn();
}
您可以使用 lambda 調用此 function:
run([]() { f(1, 2); });
Lambda 甚至可以從其封閉的 scope 中捕獲值:
int a = 1;
int b = 2;
run([a, b]() { f(a, b); });
如果您沒有std::function
但可以使用 lambda,則可以run
模板 function:
template <typename T>
void run(T const & fn) {
fn();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.