簡體   English   中英

將C ++函數作為參數傳遞而沒有函數指針/沒有內聯?

[英]Passing C++ functions as arguments without function pointer/inlined?

在不使用函數指針的情況下,將函數(具有相同的輸入參數/返回類型)作為參數傳遞給另一個函數的正確方法是什么? 我希望傳入的函數參數在調用時被內聯? 好吧,我只是不希望指針是間接的。

我找到了這個:

將函數作為顯式模板參數傳遞

但它似乎正在使用函數指針。

編輯:我真的很想避免必須創建結構來存儲每個函數參數的行為。

如果您在編譯時知道專業化,則只需傳遞類型信息:

void inlined_function() {}; // function you want to pass

template<typename F> void caller1() {
    inlined_function(); // not passed through pointer, call inline
}

如果您可以控制內聯函數,請將其實現為函子:

struct X {
    inline void operator()() // inline function
    {
    }
};

template<typename F> void caller2(F functor) {
    functor(); // inline call
}

兩種變體的客戶端代碼:

caller1<inlined_function>();
caller2(X{});

編輯

如果您無權將仿函數作為結構編寫,請為其編寫內聯結構包裝。

例如,您有void inlined_function() {}; 並且需要編寫caller2 在這種情況下,編寫一個類似於X inlined_function函數,該inlined_function函數調用inlined_function ,或者(更好)是一個lambda:

template<typename F> void caller2(F functor) {
    functor(); // inline call
}

caller2( [](){ inlined_functor(); } );

暫無
暫無

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

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