假設我有A帶有函式的foo(int i)類B和帶有函式的類bar(int i),以及objectA(類的A)和objectB(類的B)。我可以像這樣呼叫函式
objectA.foo(10);
objectB.bar(20);
我想做的是將它們都作為陣列中的函式指標arr并像這樣呼叫它們
arr[0](10);
arr[1](20);
有沒有辦法在 C 中做到這一點?如果是這樣,效率如何?
uj5u.com熱心網友回復:
您可以將std::function物件存盤在std::vector從 lambda 函式捕獲objectA或objectB. 呼叫std::function物件會帶來一些開銷,因此如果時間很關鍵,您必須衡量它是否足夠好。
例子:
#include <functional>
#include <iostream>
#include <vector>
struct A {
void foo(int x) { std::cout << "A::foo " << x << '\n'; }
};
struct B {
void bar(int x) { std::cout << "B::bar " << x << '\n'; }
};
int main() {
A objectA;
B objectB;
std::vector< std::function<void(int)> > arr{
[&objectA](int x) { objectA.foo(x); },
[&objectB](int x) { objectB.bar(x); },
};
arr[0](10);
arr[1](20);
}
輸出:
A::foo 10
B::bar 20
uj5u.com熱心網友回復:
類似于@ted-lyngmo的答案,但使用 C 20,您還可以使用std::bind_front為向量創建函式物件:
int main()
{
A objectA;
B objectB;
std::vector<std::function<void(int)>> arr{
std::bind_front(&A::foo, objectA),
std::bind_front(&B::bar, objectB)
};
arr[0](10);
arr[1](20);
}
神箭
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/368962.html
上一篇:如何使用python中的函式將字串串列一一傳遞給query()?
下一篇:函式未被識別f#
