簡體   English   中英

在 C++ (Arduino) 中將 function 和 arguments 作為參數傳遞

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

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