如何声明一个函数数组

How do I declare an array of functions?

本文关键字:一个 函数 数组 声明 何声明      更新时间:2023-10-16

这是CMD提示符计算的一部分:

1)显示选项0 - 9

2)用户输入与他们想要的功能匹配的数字

而不是10:case i: //do stuff here

我可以有一个包含函数的数组吗?

functionArrayName = [(float cosx(float _cx);), (float sinx(float _sx);) ... etc ]  

然后有一个for循环:

for(int i = 0; i < 10; ++i){
if(i = userInput){
   //call the function in functionArrayName[i];
}}

很丑,但是,嘿,这是你想要的…

float (*arr[])(float) = { cosf, sinf,...};
...
float result = arr[i]();

你似乎来自一种更"灵活"的语言,顺便说一句。

无论如何,你的代码有几个错误:

首先,最重要的是:

functionArrayName = [(float cosx(float _cx);), (float sinx(float _sx);) ... etc ]

实际应为:

#include <array>
#include <functional>
// ...
std::array<std::function<float(float)>> functionArrayName;

注意,这个std::array只能保存返回float并接受单个float参数的函数(类)对象。

其次……

if(user = input) {

(在大多数情况下)应该是:

if(user == input) {

尽管(仅在某些情况下)该表达式是有效的,但它通常表示对比较操作符的误解。

希望这对你有帮助!

下面的代码在精神上与你所要求的类似,但是使用了现代c++

#include <functional>
extern float cosx(float);
extern float sinx(float);
// ... add more
std::function<float(float)> functionArray[] = {cosx, sinx, /*... add more */};
int main() {
  int userInput = 0;
  float x = 3.14159/2;
  float y = functionArray[userInput](x);
}