c++ - 如何从其他类调用函数指针

标签 c++ pointer-to-member

假设我有一个带有一些简单函数指针的简单类,就像这样:

class ClassWithFuncPointer
{
public:
   inline void firstFunction() { /* do something */ };
   inline void secondFunction() { /* do something */ };

   // MY FUNCTION POINTER
   void (ClassWithFuncPointer::*funcPointer) ();

   // AND I CAN DEFINE IT BY DEFAULT IN CONSTRUCTOR LIKE THAT:
   ClassWithFuncPointer()
   {
       funcPointer = &ClassWithFuncPointer::firstFunction;
   }

   // AND NOW I CAN USE MY FUNCTION POINTER INSIDE OF ClassWithFuncPointer, LIKE THAT:
   void useFunctionPointer()
   {
       (this->*funcPointer )();
   }
}

所以在这里 (this->*funcPointer )(); 完成这项工作。

但我不知道如何使用其他类的funcPointer,我的意思是这样的:

class otherClass
{
    otherClass(){};

    ClassWithFuncPointer instanceOfClassWithFuncPointer;
}

现在如何在 instanceOfClassWithFuncPointer 成员的 otherClass 中使用 funcPointer。有可能吗?

我尝试了很多变体:

(this->*instanceOfClassWithFuncPointer.funcPointer)();

(instanceOfClassWithFuncPointer.*funcPointer)();

( (&instanceOfClassWithFuncPointer)->*funcPointer )();

或者只是

instanceOfClassWithFuncPointer.funcPointer();

但总是报错。我想不通。

最佳答案

如下(仅限 C++11 或更新版本)怎么样?

auto fp = instanceOfClassWithFuncPointer.funcPointer;

(instanceOfClassWithFuncPointer.*fp)();

或者也(C++98 兼容,可能使用更短的变量名)?

(instanceOfClassWithFuncPointer.*instanceOfClassWithFuncPointer.funcPointer)();

下面是一个完整的工作示例

#include <iostream>

struct ClassWithFuncPointer
 {
   public:
      inline void firstFunction ()
       { std::cout << "cwfp::firstFunction()" << std::endl; }
      inline void secondFunction () 
       { std::cout << "cwfp::secondFunction()" << std::endl; }

      void (ClassWithFuncPointer::*funcPointer) ();

      ClassWithFuncPointer()
       { funcPointer = &ClassWithFuncPointer::firstFunction; }

      void useFunctionPointer()
       { (this->*funcPointer )(); }
 };

class otherClass
 {
   public:
      otherClass ()
       { }

      ClassWithFuncPointer instanceOfClassWithFuncPointer;

      void foo ()
       {
         auto fp = instanceOfClassWithFuncPointer.funcPointer;

         (instanceOfClassWithFuncPointer.*fp)();
       } 
 };

int main ()
 {
   otherClass  oc;

   oc.foo();
 }

关于c++ - 如何从其他类调用函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54945566/

相关文章:

c++ - 在 void * 和指向成员函数的指针之间进行转换

c++ - 如何创建一个既接受数组又接受 vector 引用的函数模板?

c# - Visual Studio 中的 MSBuild - 在将文件包含为内容之前移动文件 (C#)

c++ - 为什么我的 strCopy 实现有效?

c++ - 指向成员函数的指针的问题

c++ - 如何检查对象实例上的虚函数是某种实现

c++ - Crazy C++ 模板 - 访问类的各个属性的模板

c++ - 透明配置 std::function/lambda 回调

java - 为什么大多数枚举值在声明中以 BUTT 说明符结尾?

c++ - 跨 C++ 模块传递指向成员函数的指针