我有一个类定义为b.h
class A{
public:
void (B ::*writeBlock) ();
};
其他class B
定义为
class B{
public:
A obj;
};
使用此参数class B
在b.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
在这里,b1
和b2
看起来相同,但行为不同。这就是此语法的目的。
你的问题不是很清楚,但仍然是我能理解的:
B 由 A 对象组成,并且未初始化 A 对象的函数指针writeBlock
。此外,您正在尝试取消引用未初始化的指针writeBlock
,同时通过它进行调用,这是错误的。
所以首先将writeBlock
初始化为类B
的成员函数,然后尝试取消引用它。
注意B::*
表示类B
的成员函数。因此,this->*obj.writeBlock
必须解析为 B 的成员函数之一。