如何在运行时使用typeof创建void *指针

问题描述:

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

上述宏在pvoid **而不是其他内容时失败。如何在运行时使用typeof创建void *指针

它在c中工作,但不在C++中。是否有任何围绕C++做到这一点?

+0

我认为你必须使用类似的dynamic_cast [检查出来了网页(http://www.cplusplus.com/doc/tutorial/typecasting/) – Pavenhimself

+3

'typeof'“在运行时”?你究竟想在这里测试什么?只是为了检查,这是与GCC? –

+0

基本上,当p是int **时,我使用该宏来执行int *类型转换。但是当p无效时,它会失败并报错**。 –

在C++(11)中有remove_pointer,它返回输入类型参数指向的类型。

基本上,当p是int **时,我使用该宏来执行int *类型转换。但是,当p无效时,它会失败,错误** [...]不,我不能使用typeof(* p),因为这个宏也需要确保p是一个双指针。

如果演员阵容是你需要的一个简单的功能模板应该有所帮助。

template<typename T> 
T* remove_pointer_cast(T** p) 
{ 
    return (T*)(p); 
}