簡體   English   中英

無法將std :: bind的返回值轉換為void函數指針

[英]unable to convert return value of std::bind to void function pointer

我是功能庫的新手。 我想將靜態類方法與類的對象綁定,並返回指向該函數的void指針。 我嘗試使用std :: bind,但無法將類成員函數轉換為指向該函數的自由浮動指針

這是我擁有的測試代碼:

class base{
    void (*fn)();
    int m_var;
public:
    base(int var): fn(std::bind(print, this)), m_var(var){
        std::cout << "base ctor\n";
        fn(); //something like this. fn should be a void pointer to the function.
    }

    static void print(base *b){
        std::cout << b->m_var << "\n";
    }
};

int main(){
    base *b = new base(5);
    return 0;
}

這是我得到的錯誤:

error: cannot convert ‘std::_Bind_helper<false, void (&)(base*), base*>::type’ {aka ‘std::_Bind<void (*(base*))(base*)>’} to ‘void (*)()’ in initialization

我知道我無法將類成員轉換為自由浮動函數,但是我需要std :: bind的返回類型為空指針,因為這是我正在使用的一個外部庫的輸入。 任何幫助/建議表示贊賞。

不幸的是,您不能將std::bind的結果轉換為函數指針,原因很簡單。 讓我們嘗試想象一下std::bind如何工作。 您有一個帶有一些參數和一個值的函數,並且想要獲得可以在沒有參數的情況下調用的可調用對象。 在運行時不生成新代碼的唯一可行方法是創建一個函數對象,該對象存儲帶有重載operator()的原始函數和綁定參數。 實際上std::_Bind_helper與此描述非常相似。

因此,您將獲得具有某些成員的某種類型的對象。 因此,不能以某種方式將其轉換為指向無法存儲任何參數的函數的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM