给定
// from an external C api
void f(int i, void (*g)());
const int n = ...
void a0(); void a1(); ...
void (*a[n])();
int main()
{
a[0] = a0; a[1] = a1; ...
for (int i = 0; i != n; ++i)
f(i, a[i]);
...
}
我不想生成每个函数 a0
、a1
,...并将其分别分配给 a
。相反,我想生成函数并将它们分配给循环中的 a
,类似这样的事情(抱歉,代码很丑,它不会编译):
for (int i = 0; i != n; ++i)
{
void b() { cout << i; };
a[i] = b;
}
这可能吗?我该怎么做?
最佳答案
像这样尝试:
#include <iostream>
#include <vector>
using namespace std;
// from an external C api
void f(int i, void(*g)())
{
//g();
}
const int n = 100;
using fnType = void(*)();
vector<fnType> a(n);
template <int N>
void func()
{
cout << N << endl;
}
template <int N>
void init()
{
a[N - 1] = func<N - 1>;
init<N - 1>();
}
template <>
void init<0>()
{
}
int main()
{
init<n>();
for(int i = 0; i < n; ++i)
a[i]();
for(int i = 0; i < n; ++i)
f(i, a[i]);
}
另外,你可以定义
vector<std::function<void()>> funcs(n);
并从 f 调用它:
template <int N>
void func()
{
//cout << N << endl;
funcs[N]();
}
所以,你可以简单地定义它:
for(int k = 0;k < n;k++)
funcs[k] = [k](){cout << k << endl;};
关于C++:如何在循环中为函数指针生成数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53494939/