簡體   English   中英

在std :: function中使用模板參數

[英]Using template arguments in std::function

我有一個模板化函數,它根據調用者指定的算法來選擇向量或列表元素:

template<typename It>
void Foo(It begin, It end, std::function<It(It, It)> GetElement)
{
    It element = GetElement(begin, end);
}

如何使用Lambda表達式調用此函數?

我的第一個方法是

Foo(v.begin(), 
    v.end(), 
    [v](? , ? ) {return v.begin(); });

但是我很糾結於參數部分,這是由問號表示的...

C ++ 11

Foo(v.begin(), 
    v.end(), 
    [v](decltype(v.begin()) a, decltype(v.begin()) b) { return v.begin(); });

C ++ 14

Foo(v.begin(), 
    v.end(), 
    [v](auto a, auto b) { return v.begin(); });

如果您不關心參數ab ,則可以使用: [v](auto...){ return v.begin(); } [v](auto...){ return v.begin(); }而不是在評論中由skypjack建議。


另外, 除非您有充分的理由使用std::function否則我建議將lambda作為模板參數傳遞:

template<typename It, typename F>
void Foo(It begin, It end, F&& GetElement)
{
    It element = GetElement(begin, end);
}

我寫了一篇與此主題相關的文章:
“將功能傳遞給功能”

它包含一些基准測試,這些基准測試顯示與模板參數和其他解決方案相比, std::function生成了多少程序集。

暫無
暫無

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

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