C ++:如何在循环中生成数组以函数指针

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)

我不想生成每个功能a0a1...,并将其分配给a独立。相反,我想生成函数并将它们分配给a一个循环,类似这样的东西(对不起的代码,它不会编译):

for (int i = 0; i != n; ++i)
{
    void b() { cout << i; };
    a[i] = b;
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?我该怎么做?

sna*_*yle 4

尝试这样:

#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)