#define test(p) (typeof(*(*p)) *)
上記のマクロは、が他の何かp
の代わりにある場合に失敗します。void **
cでは機能しますが、c++では機能しません。C ++でこれを行うための回り道はありますか?
#define test(p) (typeof(*(*p)) *)
上記のマクロは、が他の何かp
の代わりにある場合に失敗します。void **
cでは機能しますが、c++では機能しません。C ++でこれを行うための回り道はありますか?
C ++(11)には、入力型パラメーターが指す型を返すremove_pointerがあります。
基本的に、pがint **の場合、そのマクロを使用してint*型キャストを実行します。しかし、pがvoid **の場合、エラーで失敗します。[...]いいえ、typeof(* p)を使用できません。これは、このマクロでもpがダブルポインターであることを確認する必要があるためです。
キャストがすべてである場合は、単純な関数テンプレートが役立つはずです。
template<typename T>
T* remove_pointer_cast(T** p)
{
return (T*)(p);
}