gpt4 book ai didi

c++ - 通用 lambda 的熟悉模板语法

转载 作者:行者123 更新时间:2023-12-01 14:29:20 24 4
gpt4 key购买 nike

对于 c++20,建议为通用 lambda 添加以下语法 p0428r2.pdf

auto f = []<typename T>( T t ) {};

但是 gcc 8 中的当前实现不接受以下实例化:

f<std::string>("");

这是 gcc 中的实现错误还是缺少语言功能?我知道我们谈论的是提案,而不是批准的规范。

完整示例(与模板函数语法比较):

template <typename T> void n( T t ) { std::cout << t << std::endl; }

auto f = []<typename T>( T t ) { std::cout << t << std::endl; };

int main()
{
f<std::string>("Hello"); // error!
n<std::string>("World");
}

提示以下错误:

main.cpp:25:22: error: expected primary-expression before '>' token f("Hello");

最佳答案

lambda 表达式的结果不是函数;它是一个函数对象。也就是说,它是一个具有 operator() 的类类型重载它。所以这个:

auto f = []<typename T>( T t ) {};

等同于:

struct unnamed
{
template<typename T>
void operator()(T t) {}
};

auto f = unnamed{};

如果你想显式地为 lambda 函数提供模板参数,你必须调用 operator()明确地:f.operator()<template arguments>(parameters); .

关于c++ - 通用 lambda 的熟悉模板语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61891731/

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