C++ 将const void*指针转换为特定类指针

C++ 将const void*指针转换为特定类指针,c++,C++,我的函数声明如下 void func1(const void& * pThis) { MyClass* pMyClass = static_cast<MyClass*>(pThis); //....I use PMyClass pointer. } void func1(常量void&*pThis){ MyClass*pMyClass=static_cast(pThis);/…我使用pMyClass指针。 } 我收到错误,无法将const void*转换为M

我的函数声明如下

void func1(const void& * pThis) {
    MyClass* pMyClass = static_cast<MyClass*>(pThis);    //....I use PMyClass pointer.
}
void func1(常量void&*pThis){
MyClass*pMyClass=static_cast(pThis);/…我使用pMyClass指针。
}
我收到错误,无法将
const void*
转换为
MyClass*


如何执行此步骤?

问题在于
常量。不能使用
static\u cast
将其丢弃。如果将其强制转换为非常量
MyClass
,那么接受常量参数是没有用的。您可以使用
const\u cast
删除常量,但这是不好的-您的方法声明它不会更改参数,但实际上它正在更改参数。

您可以

MyClass* pMyClass = const_cast<MyClass*>( static_cast<const MyClass*>(pThis) );
当然,您可以使用C样式转换选择快捷方式:

MyClass* pMyClass = (MyClass*)pThis;

但是如果可能的话,我会改为修改设计。

你的意思是放弃
const
限定符作为演员阵容的一部分吗?如果是这样,您还需要一个
const_cast
;否则,您将需要强制转换到一个
const MyClass*
而不是…
const void&*pThis
甚至不应该编译,因为不允许指向引用的指针:。。。在这种情况下,还有另一个问题:
void&
甚至没有意义。一个
const void*
指向不应该修改的内存。void*(非常量)指向可以修改的内存(但不是通过void*;您必须首先强制转换它)。不过,最重要的是,如果指针指向的对象实际上是
常量
,则以非常量方式访问它是未定义的行为
const_cast
只能在非常特殊的情况下使用,而不能轻率地使用。
MyClass* pMyClass = (MyClass*)pThis;