如何在C++中强制转换为void(*)(int,int,int)?[已关闭]

ee7vknir  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(168)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

2天前关闭。
Improve this question
为了简单起见,我有一个传递void (*)(int,int,int)的函数,如何将其转换为参数?
示例:Function(void (*)(int,int,int) );
我希望在这里传递参数,但我不知道它们是什么

puruo6ea

puruo6ea1#

Function的声明要求你传递一个自由函数的地址(即不绑定到类示例的函数),这个函数有三个int类型的参数,你没有指定Function的返回类型,所以在这个例子中我假设它是void

#include <iostream>

void Function(void (*)(int, int, int));

void DoSomething(int a, int b, int c)
{
    std::cout << "DoSomething called with a=" << a << " b=" << b << " c=" << c;
}

int main()
{
    Function(DoSomething);
}

void Function(void (*callback)(int, int, int))
{
    std::cout
        << "Function called. Now calling 'callback' at address "
        << callback 
        << "\n";

    callback(1, 2, 3);
}

在这个例子中,main通过传递函数DoSomething的地址来调用Function,然后Function的实现调用它所传递的函数(名为callback)并传递3个参数123
结果如下

Function called. Now calling 'callback' at address 00511F55
DoSomething called with a=1 b=2 c=3

调用Function不需要进行任何类型转换,如果遇到错误或开始认为应该执行类型转换来调用它,那么您将犯下严重错误。

41ik7eoe

41ik7eoe2#

这就是你要找的吗?

Function(static_cast<void (*)(int,int,int)>(fp))

您可能需要const_castreinterpret_cast,这取决于您正在铸造...

相关问题