将参数传递给函数指针
Passing parameters to function pointer
我正在尝试将参数传递给作为参数传递的函数指针。
法典:
void Test(wchar_t* a, wchar_t* b)
{
// ...
}
void Test2(void(*Func)(wchar_t*, wchar_t*))
{
// ...
}
int main()
{
Test2(Test(L"Hello", L"Testing"));
return 0;
}
我收到此错误:
类型为"void"的参数与类型为"void (*)(wchar_t *, wchar_t *)"的参数不兼容
如何解决此问题以完成我想要实现的目标?
编辑:抱歉不清楚。我实际上要完成的是将一个函数注入子进程并传递两个参数(wchar_t*、wchar_t*),以便我可以使用它们。但是主函数可以是 void 或 int argc,char** argv。所以我通过简单地使用全局变量完成了我想要实现的目标
你可能想要类似的东西
void Test2(void(*Func)(wchar_t*, wchar_t*),wchar_t* x, wchar_t* y)
{
(*Func)(x,y);
}
int main()
{
Test2(Test,L"Hello", L"Testing");
return 0;
}
相反。
至于你的评论
如何在C++使用模板执行此操作?
我能想到的
template<typename Param>
void Test2(void(*Func)(Param, Param), Param x, Param y) {
(*Func)(x,y);
}
void Test(wchar_t* a, wchar_t* b);
int main() {
Test2(Test,L"Hello", L"Testing");
return 0;
}
这应该可以正常工作。
有多种方法可以解决此问题,但是,让我尝试说明为什么会发生此错误。
每个函数都有与之关联的值类型。这意味着,每个函数的计算结果都是某种类型的值。这由其返回值指示。
例如:
int foo(/*whatever*/);
计算结果为 int。因此,foo(/*whatever*/)
可以在任何需要int
的地方使用。例如像int a = b + foo(/*whatever*/)
.
Simlarly float bar(/*whatever*/);
的计算结果为float
,因此bar(/*whatever*/)
可以在任何需要浮点数的地方使用。例如像float a = b + bar(/*whatever*/)
.
但是,返回void
像void foobar(/*whatever*/)
的函数的计算结果为 void
,并且不能在需要某种类型的值(例如 int、float 等)的情况下使用。
现在进入代码。main
函数中的这一行存在以下问题:
int main()
{
Test2(Test(L"Hello", L"Testing")); /* Issue here */
return 0;
}
在这里,您将Test(L"Hello", L"Testing")
作为参数传递给Test2
。现在请记住,Test(/*whatever*/)
的计算结果为 void
,因为 Test
返回一个 void。
所以你在这条线上所做的是这样的
Test2(/*something that evaluates to a void*/);
然而,Test2
期待一个void (*)(wchar_t*, wchar_t*)
,这是一个pointer to a function that returns void
,它与void
不同。
发生的事情是,编译器看到您正在预期void (*) (wchar_t*, wchar_t*)
的位置传递void
,因此它正确地指示了该错误。
有不同的方法可以解决此问题,这些方法在其他答案中提到。
我需要使用C++模板吗?
当然,您可以使用C++模板执行此操作,如下所示:
#include<utility>
// ...
template<typename F, typename... A>
void Test2(F &&f, A&&... a)
{
std::forward<F>(f)(std::forward<A>(a)...);
// ...
}
// ...
Test2(Test, L"Hello", L"Testing");
但是你不需要他们来做你想做的事情。
@πάνταῥεῖ已经在其回答中解释了原因。
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址