4

我有如下函数声明

void func1(const void& * pThis) {
    MyClass* pMyClass = static_cast<MyClass*>(pThis);    //....I use PMyClass pointer.
}

我收到错误无法转换const void*MyClass*

这一步怎么做?

4

2 回答 2

5

你可以

MyClass* pMyClass = const_cast<MyClass*>( static_cast<const MyClass*>(pThis) );

但是这个可怕的语法是暗示:为什么函数有一个 const 参数,你不希望它像

void func1(void * pThis) {

当然,您可以使用 C-style cast 走捷径:

MyClass* pMyClass = (MyClass*)pThis;

但如果可能的话,我会改正设计。

于 2012-07-05T06:44:30.673 回答
4

const就是问题所在。它不能用static_cast. 鉴于您将其转换为 non-const MyClass,无论如何接受 const 参数是没有用的。您可以使用const_cast来删除 const-ness,但这会很糟糕 - 您的方法声明它不会更改参数,但实际上会更改它。

于 2012-07-05T06:41:36.510 回答