繁体   English   中英

如何在 C++ 中强制转换为 void (*)(int,int,int)?

[英]How do I cast to a void (*)(int,int,int) in C++?

为了保持简单,我有一个传递void (*)(int,int,int)的函数,如何将其作为参数转换为它?

示例: Function(void (*)(int,int,int) );

我期待在这里传递参数,但我不知道它们是什么

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 如果您遇到一个错误或开始认为您应该执行强制转换来调用它,那么您将做一些非常错误的事情。

这是你要找的吗?

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

您可能还需要const_castreinterpret_cast ,具体取决于您要投射的内容...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM