[英]Using function template as template template parameter in C++
假設我有一個帶模板模板參數的函數,如下所示:
template <template <class T> class F, typename P>
void applyFunction(int param)
{
F<P> fn;
fn(param);
}
以上內容可以為Functor采用任意類模板並應用它。 例如,如果我定義:
template<typename T>
struct SomeFunctor
{
void operator()(int param)
{
T::doStuff(param);
}
};
然后我可以撥打以下電話:
applyFunction<SomeFunctor, MyClass>(0);
但我真正想做的是能夠傳遞函數模板(而不僅僅是定義仿函數的類模板)。 所以,如果我有這樣的事情:
template<typename T>
void someFunction(int param)
{
T::doStuff(param);
}
理想情況下,我可以做這樣的事情:
applyFunction<someFunction, MyClass>(0);
不幸的是,這不是合法的C ++。 有沒有辦法做到這一點,我錯過了? 換句話說,傳遞函數模板而不是類模板作為模板模板參數? 從概念上講,我不明白為什么不可能。
您可以將指向函數的指針作為模板參數:
template < typename T, T (*F)(int) >
void apply_function(int param) {
F(param);
}
template < typename T >
T some_function(int param) {
T::doStuff(param);
}
int main() {
apply_function< float, some_function >(5);
}
在你的情況下,它將是:
apply_function< MyClass, some_function >(0);
然后例如。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.