'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
在这里,b1
和 b2
看起来一样,但行为不同。这就是此语法的目的。
我有一个 类 定义为 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
在这里,b1
和 b2
看起来一样,但行为不同。这就是此语法的目的。