如果你知道在編譯時的專業化,你只需要通過類型信息:
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
,或(更好的)算符,拉姆達:
template<typename F> void caller2(F functor) {
functor(); // inline call
}
caller2([](){ inlined_functor(); });
嘿,我喜歡你的想法編輯。所以inlined_functor()也可以有inlined_functor2(),這些仍然是同一類中的普通方法? – user997112 2014-11-24 10:55:35
@ user997112 - 是的。內聯函數互相調用將導致內聯操作。 – utnapistim 2014-11-24 11:33:15