块范围中的功能指针定义

时间:2018-04-19 22:48:19

标签: c++ pointers scope function-pointers

我有这样的代码部分。

if (opt_choice == 1){
  double (*foo)(int , const MatrixXd& ); 
  double (*optimize)(double (*)(int, const MatrixXd&)) = function1;}
else if (opt_choice == 2){
  double (*foo)(int , const VectorXd& ); 
  double (*optimize)(double (*)(int, const VectorXd&)) = function2;}

我打算使用相同的函数指针(这里 optimize )根据用户输入指向不同的函数。同样,我还有另一个函数指针 foo ,它根据用户的选择采用不同的参数。稍后将foo分配给不同的功能。

switch (....)
case 1: foo = someFunction; break;  // error : foo is not declared in this scope
case 2: foo = someFunction2; break; 
...

最后,我希望使用各自的函数指针调用这两个函数。

optimize(var1,foo); // error : optimize is not declared in this scope 

正如您可能已经猜到的那样,编译器在此处抛出错误,因为 foo 优化不在范围内,因为它们是在if语句中声明的。

有没有办法实现这个目标?也就是说,在范围内保持 foo 优化直到程序结束。 谢谢。

1 个答案:

答案 0 :(得分:0)

首先应该为函数指针定义一个类型。像这样:

typedef double (*FooFunc)(int, const MatrixXd&);
typedef double (*OptimizeFunc)(int, const VectorXd&);

接下来,您可以定义if范围之外的变量:

FooFunc foo;
OptFunc optimize;

然后在if

内进行分配
if (opt_choice == 1)
{
    optimize = function1;
}
else if (opt_choice == 2)
{
    optimize = function2;
}

你永远不会在你的第一个代码片段中分配foo,所以我不知道在那里分配给它的是什么,但它应该分配给一个与{{1}具有相同签名的函数指针}类型。对于切换,您可以执行以下操作:

FooFunc