gpt4 book ai didi

c++ - 在 std::function 中使用模板参数

转载 作者:行者123 更新时间:2023-11-30 01:08:24 24 4
gpt4 key购买 nike

我有一个模板化函数,它根据调用者指定的算法选择 vector 或列表元素:

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。开始(); } 而不是 skypjack 在评论中的建议。


此外,我建议将 lambda 作为模板参数传递除非您有充分的理由使用 std::function:

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

我写了一篇与主题相关的文章:
"Passing functions to functions"

它包含一些基准测试,显示与模板参数和其他解决方案相比,std::function 生成了多少程序集。

关于c++ - 在 std::function 中使用模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42856070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com