gpt4 book ai didi

C++ 专门针对特定类型的 lambda

转载 作者:可可西里 更新时间:2023-11-01 16:44:48 25 4
gpt4 key购买 nike

<分区>

我正在玩转所呈现的 lambda“重载”here , 很快就到了我发现创建专门的 lambda 闭包很方便的地步。所以我首先试错了一下,我最有希望的试验是

auto call_for_vector = [] template<typename T> (std::vector<T>) {};

但是,稍后再看cppreference显示标准似乎都不允许这种或类似的结构。

不支持此类特化的原因是什么?

我知道可以使用 SFINAE 获得这种行为,但它的可读性较差,更难编写且更容易出错。当然,也可以使用适当的 operator() 简单地编写一个类,但这就是 C++03 :-)



这样的语法有什么用?

一个例子,这将允许像下面的代码一样简单的 lambda“重载”

template <class F1, class F2>
struct overload_set : F1, F2
{
overload_set(F1 x1, F2 x2) : F1(x1), F2(x2) {}
using F1::operator();
using F2::operator();
};

template <class F1, class F2>
overload_set<F1,F2> overload(F1 x1, F2 x2)
{
return overload_set<F1,F2>(x1,x2);
}

auto f = overload(
[](auto&& x){ std::cout<<"call by default"<<std::endl;},
[] template<typename T>(std::vector<T>){std::cout<<"call for vector"<<std::endl;}
);

一个人可以获得这种行为,例如基于 this answer 中的技术使用 SFINAE ,但同样……这很糟糕。

SFINAE 是否有一种简单的解决方法来获取特定的重载?

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