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 スタイルのキャストを使用して近道をすることもできます。

MyClass* pMyClass = (MyClass*)pThis;

可能であれば、代わりにデザインを修正します。

于 2012-07-05T06:44:30.673 に答える
4

constが問題です。を使用してキャストすることはできませんstatic_cast。非 constMyClassにキャストしていることを考えると、とにかく const 引数を受け入れても意味がありません。を使用const_castして const-ness を削除できますが、それは悪いことです。メソッドは引数を変更しないと宣言していますが、実際には変更しています。

于 2012-07-05T06:41:36.510 に答える