繁体   English   中英

如何使用(* mpORBextractorLeft)(im,cv :: Mat(),mvKeys,mDescriptors);

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM