不能转换为 void *
can't cast to void *
class MyClass {
public:
register_callback(int, void*);
}
typedef boost::shared_ptr<MyClass> myClass_p;
class MyOtherClass {
public:
registerItem(std::pair<std::string, myClass_p>insertItem) {
auto foo = insertItem.second;
void *bar = static_cast<void*>(foo);
}
鉴于上面的代码,为什么我得到“static_cast:无法从 myClass_p 转换为 void *。我认为您可以将任何指针转换为 void *。
foo
不是指针。它是一个对象。该对象恰好是 boost::shared_ptr<MyClass>
,因此在语义上是一个智能指针。但它不是指针。
假设你正在做的事情是有意义的,你需要:
void *bar = foo.get();
boost::shared_ptr<MyClass>::get()
returns 指向共享对象的指针(如果为空,则 nullptr
)。
class MyClass {
public:
register_callback(int, void*);
}
typedef boost::shared_ptr<MyClass> myClass_p;
class MyOtherClass {
public:
registerItem(std::pair<std::string, myClass_p>insertItem) {
auto foo = insertItem.second;
void *bar = static_cast<void*>(foo);
}
鉴于上面的代码,为什么我得到“static_cast:无法从 myClass_p 转换为 void *。我认为您可以将任何指针转换为 void *。
foo
不是指针。它是一个对象。该对象恰好是 boost::shared_ptr<MyClass>
,因此在语义上是一个智能指针。但它不是指针。
假设你正在做的事情是有意义的,你需要:
void *bar = foo.get();
boost::shared_ptr<MyClass>::get()
returns 指向共享对象的指针(如果为空,则 nullptr
)。