Joh*_*gel 5 c++ arrays pointers function
给定
// 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]);
...
}
Run Code Online (Sandbox Code Playgroud)
我不想生成每个功能a0,a1...,并将其分配给a独立。相反,我想生成函数并将它们分配给a一个循环,类似这样的东西(对不起的代码,它不会编译):
for (int i = 0; i != n; ++i)
{
void b() { cout << i; };
a[i] = b;
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?我该怎么做?
尝试这样:
#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]);
}
Run Code Online (Sandbox Code Playgroud)
另外,您还可以定义
vector<std::function<void()>> funcs(n);
Run Code Online (Sandbox Code Playgroud)
并从f调用它:
template <int N>
void func()
{
//cout << N << endl;
funcs[N]();
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以简单地定义它:
for(int k = 0;k < n;k++)
funcs[k] = [k](){cout << k << endl;};
Run Code Online (Sandbox Code Playgroud)