#define test(p) (typeof(*(*p)) *)
当p
为void **
而不是其他内容时,上述宏失败。
它适用于c但不适用于c ++。在c ++中是否有任何循环方式?
答案 0 :(得分: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);
}