Passing parameters to function pointer
我试图将参数传递给作为参数传递的函数指针。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; } |
我得到这个错误:
argument of type"void" is incompatible with parameter of type"void (*)(wchar_t *, wchar_t *)"
我如何解决这个问题来完成我正在努力实现的目标?
编辑:很抱歉不清楚。我真正要做的是向子进程中注入一个函数,并传递两个参数(wchar_t*,wchar_t*),以便使用它们。但是主函数可以是void或int argc、char**argv。因此,我只需使用全局变量就可以实现我想要实现的目标。
你可能想吃点什么
1 2 3 4 5 6 7 8 9 10 | 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; } |
相反。
至于你的意见
How do i do this in C++ with templates?
我能想到
1 2 3 4 5 6 7 8 9 10 11 | 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; } |
这应该很有效。
Do I need to use C++ templates?
当然,您可以使用如下C++模板来实现这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #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"); |
但你不需要他们做你想做的事。@π?ε?ε?已经在答案中解释了原因。
有多种方法可以解决TIH问题,不过,让我试着说明发生此错误的原因。
每个函数都有一个与之相关联的值类型。这意味着,每个函数的计算结果都是某种类型的值。这由它的返回值表示。
例如:
1 | int foo(/*whatever*/); |
计算为整数,因此
同时,
一种返回
现在开始编码。您的
1 2 3 4 5 | int main() { Test2(Test(L"Hello", L"Testing")); /* Issue here */ return 0; } |
在这里,你把
所以你在那条线上做的是
1 | Test2(/*something that evaluates to a void*/); |
但是,
所以,现在发生的情况是,编译器看到您正在传递一个
其他答案中提到的解决这个问题的方法可能不同。