gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:16 25 4
gpt4 key购买 nike

给定

// 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]);
...
}

我不想生成每个函数 a0a1,...并将其分别分配给 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com