C++ 如何使用(*mpORBextractorLeft)(im、cv::Mat()、mvKeys、MDDescriptor);
如何使用这种格式? (*名称)(参数1、参数2、参数3、参数4) 此代码属于orb_slam。。。。C++ 如何使用(*mpORBextractorLeft)(im、cv::Mat()、mvKeys、MDDescriptor);,c++,orb,C++,Orb,如何使用这种格式? (*名称)(参数1、参数2、参数3、参数4) 此代码属于orb_slam。。。。 指向非成员函数的指针声明具有以下结构: 返回类型(*名称)(参数列表) 因此,为了声明指向函数的指针func,将const char*和int作为参数,并返回bool,您说 void Frame::ExtractORB(int flag, const cv::Mat &im) { if(flag==0) (*mpORBextractorLeft)(im,cv::M
指向非成员函数的指针声明具有以下结构: 返回类型(*名称)(参数列表) 因此,为了声明指向函数的指针
func
,将const char*
和int
作为参数,并返回bool
,您说
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);
}
请注意,您需要在*func
周围加上括号,否则编译器会将其解释为函数声明
bool (*func)(const char*, int);
返回bool*
现在假设你有一个函数
bool* func(const char*, int);
则可以通过以下方式使指针指向此函数
bool foo(const char* x, int y) { /* ... */ }
为了调用func
所指向的函数,可以取消对指针的引用,并使用如下参数调用它
func = &foo;
这就是您在提供的示例中所做的。使用给定参数调用由mpORBextractorLeft
(分别为mpORBextractorRight
)指向的函数
一些进一步的说明:
- 可以省略函数指针的解引用,因此
也应该有效bool result = (*func)("abc", 3);
- 声明指针时,可以立即对其进行初始化:
bool result = func("abc", 3);
- 如果需要多次写入指针类型,可以使用
简化代码:typedef
bool (*func)(const char*, int) = &foo;
typedef bool (*fun_ptr)(const char*, int);
fun_ptr func1 = &foo;
fun_ptr func2 = &bar;