"A类"调用的这个参数在做什么?



我有一个类定义为b.h

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

其他class B定义为

class B{
public:
A obj;
};

使用此参数class Bb.cpp中用作

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

请提供上述writeBlock的定义。

如果您的意思是它的目的和可能的用途,那么这是一种让不同的B实例具有不同行为的方法,具体取决于它们writeBlock成员的obj初始化为什么。

A将类B的成员函数的地址存储为成员,以供以后使用。这就是writeBlock:它是指向成员函数的指针。

writeBlock必须在某处初始化以指向B的成员函数,在这种情况下,该函数采用零参数并返回 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看起来相同,但行为不同。这就是此语法的目的。

你的问题不是很清楚,但仍然是我能理解的:

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

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

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

相关内容

最新更新