我理解一致性论点,但模板的大部分参数都是类型,所以我觉得既然 lambda 是定义结构的简洁方式,它可能应该默认为 typename
/class
(您仍然需要编写 int/size_t/short
)。
如果有人不熟悉 C++20 中对 lambda 的更改,请看这里的示例:
[]<typename T>(const std::vector<T>& v)
{
for(const auto& x : v) { std::cout << x; }
};
我的问题是为什么不:
[]<T>(const std::vector<T>& v)
{
for(const auto& x : v) { std::cout << x; }
};
最佳答案
问题是这个已经有一个意思:
template <T> void foo();
它是一个带有一个模板参数的函数模板,该模板参数是一个类型为T
的非类型模板参数,并且该模板参数没有名称。
如果相同的语法根据您引入的是函数模板还是通用 lambda 而意味着非常不同的东西,那将会非常困惑 - 也就是说,两个非常相似的上下文服务于相似的目的!
然后...如果您真的想要一个非类型模板参数,您会怎么做?就不能拥有一个吗?
关于c++ - 为什么 C++20 模板 lambda 使用 typename 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56491931/