【发布时间】:2011-09-25 17:05:59
【问题描述】:
我想在 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*))’
$ %
【问题讨论】:
-
你打算用这些指针做什么?
-
C++ (几乎)是 C 的超集,所以如果您的目标只是在 C++ 中做与在 C 中所做的相同的事情,那么您可以做到。但是,如果您提出正确的问题,通常会有更好的方法。你到底想做什么?
-
嗯。出于某种原因,这适用于我的小测试用例,但不适用于我的大程序。让我处理测试用例...
-
您在代码中显示的内容肯定不能在 C++ 中完成。必须始终明确地在 void 和任何其他之间进行转换。使用 Benoit 提供的模板解决方案会更好
-
stackoverflow.com/questions/559581/… .. 这可能会让你感兴趣 :)
标签: c++ void-pointers