1
#define test(p) (typeof(*(*p)) *)

上記のマクロは、が他の何かpの代わりにある場合に失敗します。void **

cでは機能しますが、c++では機能しません。C ++でこれを行うための回り道はありますか?

4

1 に答える 1

1

C ++(11)には、入力型パラメーターが指す型を返すremove_pointerがあります。

基本的に、pがint **の場合、そのマクロを使用してint*型キャストを実行します。しかし、pがvoid **の場合、エラーで失敗します。[...]いいえ、typeof(* p)を使用できません。これは、このマクロでもpがダブルポインターであることを確認する必要があるためです。

キャストがすべてである場合は、単純な関数テンプレートが役立つはずです。

template<typename T>
T* remove_pointer_cast(T** p)
{
    return (T*)(p);
}
于 2012-12-11T12:26:16.290 に答える