簡體   English   中英

在C ++中使用函數模板作為模板模板參數

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

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