[英]How to use (*mpORBextractorLeft)(im,cv::Mat(),mvKeys,mDescriptors);
void Frame::ExtractORB(int flag, const cv::Mat &im)
{
if(flag==0)
(*mpORBextractorLeft)(im,cv::Mat(),mvKeys,mDescriptors);
else
(*mpORBextractorRight)(im,cv::Mat(),mvKeysRight,mDescriptorsRight);
}
如何使用这种格式? (*名称)(param1,param2,param3,param4)
该代码属于orb_slam .... https://github.com/raulmur/ORB_SLAM2
指向非成员函数的指针的声明具有以下结构:
返回类型(*名称)(参数列表)
因此,为了声明一个指向以const char*
和int
作为参数并返回bool
的函数的指针func
,
bool (*func)(const char*, int);
注意,您需要在*func
周围加上括号,否则编译器会将其解释为函数的声明。
bool* func(const char*, int);
返回bool*
。
现在假设您有一个功能
bool foo(const char* x, int y) { /* ... */ }
对应类型,那么您可以通过以下方式使指针指向该函数
func = &foo;
为了调用func
指向的func
,您可以取消引用指针,并使用类似这样的参数来调用它
bool result = (*func)("abc", 3);
这是您在提供的示例中所做的。 使用给定的参数调用mpORBextractorLeft
指向的函数(分别是mpORBextractorRight
)。
其他注意事项:
可以取消对函数指针的取消引用,因此
bool result = func("abc", 3);
应该也可以。
声明指针时,可以立即对其进行初始化:
bool (*func)(const char*, int) = &foo;
如果需要多次编写指针的类型,可以使用typedef
简化代码:
typedef bool (*fun_ptr)(const char*, int); fun_ptr func1 = &foo; fun_ptr func2 = &bar;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.