如何使用void *指针声明C ++原型,以便它可以采用任何指针类型?

时间:2011-09-25 17:06:00

标签: c++ void-pointers

我想在C ++中创建一个函数原型,以便有一个void *参数可以获取任何类型的指针。我知道这在C中是可能的。在C ++中是否可能?

[编辑]以下是我试图开始工作的代码的简化版本:

#include <stdio.h>

void func(void (f)(const void *))
{
    int i = 3;
    (*f)(&i);
}

void func_i(const int *i)
{
    printf("i=%p\n",i);
}

void func_f(const float *f)
{
    printf("f=%p\n",f);
}

void bar()
{
    func(func_i);
}

这是编译器输出:

$ g++ -c -Wall x.cpp
x.cpp: In function ‘void bar()’:
x.cpp:21: error: invalid conversion from ‘void (*)(const int*)’ to ‘void (*)(const void*)’
x.cpp:21: error:   initializing argument 1 of ‘void func(void (*)(const void*))’
$ %

3 个答案:

答案 0 :(得分:4)

你可以使用void *,就像使用C一样,但是你需要在调用时转换你的参数。我建议你使用模板功能

template<typename T>
void doSomething(T* t) {...}

答案 1 :(得分:1)

怎么样:

void func(void *);

与C完全一样? :P

答案 2 :(得分:1)

int i = 345;
void * ptr = &i;
int k = *static_cast< int* >(ptr);

UPDATE ::
What you have shown in the code certainly cannot be done in C++.
Casting between void and any other must always be explicitly done.

Check these SO link for more details on what the C -standard has to say:
1) http://stackoverflow.com/questions/188839/function-pointer-cast-to-different-signature
2) http://stackoverflow.com/questions/559581/casting-a-function-pointer-to-another-type