我在b.h
class A{
public:
void (B ::*writeBlock) ();
};
其他class B
定义为
class B{
public:
A obj;
};
在class B
中使用b.cpp
的此参数作为
(this->*obj.writeBlock)();
请提供上述writeBlock
的调用的定义。
答案 0 :(得分:1)
你的问题不是很清楚,但仍然是我能理解的:
B由A对象组成,A对象的函数指针writeBlock
未初始化。此外,您尝试取消引用未初始化的指针writeBlock
,同时通过它进行调用,这是错误的。
首先将writeBlock
初始化为类B
的成员函数,然后尝试解除引用它。
注意B::*
表示类B
的成员函数。因此,this->*obj.writeBlock
必须解析为B的成员函数之一。
答案 1 :(得分:1)
如果你的意思是它的目的和可能的用途,那么这是让B
的不同实例具有不同行为的一种方式,这取决于他们obj
的{{1}}被初始化为writeBlock
成员。
类A
将成员类B
的成员函数的地址存储为稍后要使用的成员。这就是writeBlock
:它是pointer to member function。
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
看起来相同,但表现不一样。这就是这种语法的目的。