块作用域中的函数指针定义
Function Pointer Definition in Block Scope
>我有一个这样的代码部分。
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;}
我打算使用相同的函数指针(此处优化(根据用户输入指向不同的函数。同样,我还有另一个函数指针 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 和 optimize 不在范围内,因为它们是在 if 语句中声明的。
有什么办法可以做到这一点吗?也就是说,保持foo并在范围上优化,直到程序结束。谢谢。
首先应定义函数指针的类型。像这样:
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
,所以我不知道在那里分配给它什么,但它应该分配给与FooFunc
类型具有相同签名的函数指针。对于开关,您可以执行以下操作:
switch (...)
{
case 1: foo = <some function with a FooFunc signature>; break
case 2: foo = <some other function with a FooFunc signature>; break;
// ...etc.
}
相关文章:
- 用户定义函数中的指针和输入
- 使用"Task"函数指针队列定义作业管理器
- 通过函数指针定义类范围之外的方法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 为什么不能将字符指针定义为数组?
- 块作用域中的函数指针定义
- 从较小类型的指针定义的范围构造向量
- 函数指针定义中是否允许使用参数名称
- 是对范围的指针定义明确的比较
- 无法将指针定义为用户定义的类,但我可以直接实例化
- C++ GoogleTest 使用夹具 - 无法访问函数指针定义
- 是指针定义行为映射中 nullptr 的默认值
- 是否应始终为具有原始指针成员的类中的深层复制指针定义复制构造函数
- 在类模板外部为指针定义函数
- 如何使用函数指针定义多集
- 使用结构作为指针定义变量
- 使用非常量指针定义对常量数据的指针的引用有什么问题?
- 是否有办法为类的指针定义括号操作符?
- 为智能指针定义类型是不好的做法吗?
- 为什么函数指针定义适用于任意数量的'&'号或星号"*"?