制作一个函数指针数组

时间:2018-03-18 09:48:02

标签: c++ function-pointers

我的问题是:我想编写一个创建数组函数指针的程序。我知道如何制作指向函数的指针,但不知道如何制作它们的数组。

这就是我现在所做的:

In [85]: cols = ['col1','col2','col3','col4']

In [86]: all_combinations = list(chain(*[list(combinations(cols, i))
                                 for i in range(2, len(cols)+1)]))

In [87]: all_combinations
Out[87]:
[('col1', 'col2'),
 ('col1', 'col3'),
 ('col1', 'col4'),
 ('col2', 'col3'),
 ('col2', 'col4'),
 ('col3', 'col4'),
 ('col1', 'col2', 'col3'),
 ('col1', 'col2', 'col4'),
 ('col1', 'col3', 'col4'),
 ('col2', 'col3', 'col4'),
 ('col1', 'col2', 'col3', 'col4')]

在我的代码中,我创建了这些指向数组中函数的指针,例如。

double add(double a, double b) { return a + b; }
double sub(double a, double b) { return a - b; }
double mult(double a, double b) { return a * b; }
double div(double a, double b) { return a/b; }

int main() {
    double(*Padd)(double a, double b);
    double(*Psub)(double a, double b);
    double(*Pmult)(double a, double b);
    double(*Pdiv)(double a, double b);

    Padd = &add;
    Psub = ⊂
    Pmult = &mult;
    Pdiv = ÷
} 

我该怎么做?

1 个答案:

答案 0 :(得分:0)

只需声明一种新类型' Tpointers'表示指向函数的指针,该函数提供两个double并返回double。

在代码中,您可以创建一个函数数组。

#include<iostream>

// The function pointer type!
typedef double (*Tpointers)(double, double);

double add(double a, double b) { return a + b; }
double sub(double a, double b) { return a - b; }
double mult(double a, double b) { return a * b; }
double div(double a, double b) { return a / b; }

int main() {
  // A functions pointers array .
  Tpointers fun_array[4];

  // Assign the values 
  fun_array[0] = &add;
  fun_array[1] = &sub;
  fun_array[2] = &mult;
  fun_array[3] = &div;

  // A little test
  std::cout << fun_array[2](3, 3) << " " << fun_array[3](3,3) << " " << fun_array[1](3,3)
        << std::endl;

  return 0;
}

在c ++中,您还可以创建函数指针的std :: vector ...或者来自&#34; Tpointers&#34;的std库中的任何容器。