簡體   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