'class A' 调用的这个参数在做什么?

What this parameter of 'class A' call is doing?

我有一个 类 定义为 b.h

class A{ 
public:
   void       (B ::*writeBlock)    ();
};

其他class B定义为

class B{
public:
      A obj;
};

使用 class B 的这个参数在 b.cpp 中用作

(this->*obj.writeBlock)();

请为 writeBlock.

提供上述调用的定义

你的问题不是很清楚,不过我能理解的还是:

B由A对象组成,A对象的函数指针writeBlock没有初始化。此外,您试图取消引用未初始化的指针 writeBlock,同时通过它进行调用,这是错误的。

所以首先将 writeBlock 初始化为 class B 的成员函数,然后尝试取消引用它。

注意B::*表示classB的成员函数。因此,this->*obj.writeBlock 必须解析为 B 的成员函数之一。

如果你的意思是它的目的和可能的用途是什么,那么它是一种让 B 的不同实例有不同行为的方法,这取决于它们的 obj 已经为它们的 writeBlock 会员。

ClassA将classB的一个成员函数的地址存为成员,以备后用。这就是 writeBlock 的含义:它是一个 pointer to member function.

writeBlock 必须在某处初始化以指向 B 的成员函数,在这种情况下,它采用零参数和 returns void。

可能的场景如下:

class B
{
public:
    A obj;

    void DoWork()
    {
        (this->*obj.writeBlock)();
    }

    void Task1() { std::cout << "1"; };
    void Task2() { std::cout << "2"; };
};


B b1, b2;
b1.obj.writeBlock = &B::Task1;
b2.obj.writeBlock = &B::Task2;

b1.DoWork(); // prints 1
b2.DoWork(); // prints 2

在这里,b1b2 看起来一样,但行为不同。这就是此语法的目的。