我可以使用像这样的doSomething方法;首先将指向A类的指针分配给b?
的void *成员class A
{
public:
A(int);
int m_x;
int doSomething(){};
};
class B
{
public:
void* m_y;
};
#include "x.h"
using namespace std;
A::A(int x)
{
m_x = x;
}
int main()
{
//create 2 pointers to A and B
B *b;
A *a;
b = new B();
a = new A(15);
b->m_y = a;
((A*)b->m_y)->doSomething();
delete a;
delete b;
return 0;
}
答案 0 :(得分:5)
远离void*
为什么不在[{1}}中指向A
(或者甚至,B
拥有B
的实例),或A
拥有智能指针对B
的实例 - 还有很多其他更好的做事方式。
答案 1 :(得分:3)
是的,你可以,但你不应该使用C风格的演员表。更好地使用static_cast
:
(static_cast<A*>(b->m_y))->doSomething();
答案 2 :(得分:2)
是的,这在技术上是正确的,但它也没用。
如果您知道将在A*
中存储m_y
,那么为什么不给它那种类型?如果您事先不知道要存储的确切类型,请使用继承和多态(virtual
),这样很多更安全。
编辑:好的,这是与旧代码的接口。然后static_cast
是最清洁,最明确的方式来进行演员表演。然而,它完全等同于你正在做的事情。
答案 3 :(得分:0)
没有。没有正确的方法来使用void*
指针。