2016-04-06 8 views
1

私は引数としてvoidポインタを持つメソッドを持っています。メソッドの本体では、voidポインタが特定の型のポインタ(私の場合はカード*)に変換可能な場合にのみ実行する必要があるコードを記述します。カードがカードポインタに変換可能かどうかを確認するにはどうすればよいですか?Voidポインタを他の特定のポインタ型に変換できるかどうかをチェックする方法は?

+0

あなたは、ポインタ*が実際には 'card'オブジェクトを指しているかどうかを知りたいのですか?多くの場合、ポインタを変換できますが、変換後にポインタを使用することはできません。 –

答えて

1

これを行うためのC++言語機能はありません。

[これはしない] void*は、タイプ情報を格納する特定の既知のタイプのクラスを指し、もう1つはvoid*です。次に、最初のvoid*を型を含むデータ型に変換し、その型があなたが望むものであるかどうかを判定し、入れ子にしてvoid*を取り込み、それを目的の型にキャストします。

あなたが解決しようとしている問題は実際のです。おそらくへのC++の慣用的なアプローチはです。

+0

独自のタイプ情報を含めることがこれを行う唯一の方法です。 'void *'が必要な場合、正しいデータ型が与えられていると常に仮定しなければなりません。 http://stackoverflow.com/questions/4131091/dynamic-cast-from-void –

+0

'void *'を避けるのが最善の方法ですが、時にはフックを提供するために使用する必要があります。たとえば、マルチスレッドコードを書くとき、 'pthread_create'は' void *(* func)(void *) '型の関数ポインタを期待しています。 (はい、私はpthreadsを使用しますが、使用するコンパイラはC++ 11をサポートしていません) –

+0

@KyleA: 'pthreads'はCであり、C++ 98でもないからです。 C++ 98では、 'class Runnable {virtual void run()= 0;仮想〜Runnable();} '。 – MSalters

関連する問題