可变参数lambda vs可变参数模板函数:完全等效吗?

砂木

考虑一下此代码段

#include <chrono>
auto wrapAndCallLambda = 
[] (auto fn, auto &&... params)
{
    const auto start = std::chrono::system_clock::now();

    auto result = fn(std::forward<decltype(params)>(params)...);
    const auto end = std::chrono::system_clock::now();

    const auto elapsed = end - start;
    std::cout << "Elapsed time: " << elapsed.count() << "s";
    return result;
};


template <typename Fn, typename... Args>
auto wrapAndCall(Fn fn, Args &&... params)
 {
    const auto start = std::chrono::system_clock::now();

    auto result = fn(std::forward<decltype(params)>(params)...);
    const auto end = std::chrono::system_clock::now();

    const auto elapsed = end - start;
    std::cout << "Elapsed time: " << elapsed.count() << "s";
    return result;
 }

它严格等效吗?有什么考虑要考虑(与意见和风格无关)指导选择哪一个?代码膨胀?表演?编译时间是否广泛使用?

阿特耶

wrapAndCallLambda是实际对象,而是wrapAndCall模板。

这意味着您可以wrapAndCallLambda直接传递给其他函数,并且必须显式传递&wrapAndCall<fn_type, arg1, arg2, ...>或将其包装到另一个lambda中,以传递其参数。

这也意味着您不能重载或专门化wrapAndCallLambda,但是您可以轻松编写另一个重载wrapAndCall

您也永远无法wrapAndCallLambda通过ADL查找这可能是您想要的功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可变参数模板函数接受lambda

来自分类Dev

可变参数模板函数接受lambda

来自分类Dev

是否可以从函数模板返回可变参数的lambda?

来自分类Dev

是否可以从函数模板返回可变参数的lambda?

来自分类Dev

可变参数模板对

来自分类Dev

使用可变参数模板参数解析lambda签名

来自分类Dev

用可变参数模板参数调用零参数模板函数指针吗?

来自分类Dev

使用可变参数lambda迭代可变参数功能模板的参数

来自分类Dev

将可变参数模板参数传递给可变函数

来自分类Dev

可变参数函数和可变参数模板重载查找

来自分类Dev

可变参数模板类-可变参数成员函数

来自分类Dev

С++可变参数模板:实现可变参数

来自分类Dev

递归可变参数函数模板

来自分类Dev

编写可变参数模板构造函数

来自分类Dev

类型受限的可变参数模板函数

来自分类Dev

如何传递可变参数模板函数?

来自分类Dev

如何重载可变参数模板函数?

来自分类Dev

可变参数模板函数重载失败

来自分类Dev

可变参数模板中的函数顺序

来自分类Dev

可变参数模板类的可变参数模板

来自分类Dev

可变参数模板类的可变参数模板

来自分类Dev

没有模板参数的可变参数模板函数

来自分类Dev

可变参数模板示例

来自分类Dev

可变参数模板提取

来自分类Dev

可变参数模板示例

来自分类Dev

可变参数模板的论点

来自分类Dev

如何制作可变参数的lambda?

来自分类Dev

可变参数模板参数必须始终为最后吗?

来自分类Dev

获取可变参数模板可变参数模板参数可变参数