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

p上面的宏在isvoid **而不是其他东西时失败。

它适用于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 回答