[英]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.