【发布时间】:2015-09-20 09:56:00
【问题描述】:
首先,我知道我可以使用模板类/函子,但这不是我想要的。
这是 lambda:
auto lambda = [] (auto var) {
decltype(var) x;
//do stuff with x but nothing with var
};
问题是我收到警告 C4100(未引用的形式参数)。我也知道我可以使用一些技巧,例如禁用警告并在 lambda 之后再次启用它或使用诸如 UNREFERENCED_PARAMETER 之类的宏,但这是作弊。
有什么办法可以做到吗?
理想的代码应该是这样的:
template <typename T>
auto lambda = [] () {
T x;
//do stuff with x
};
【问题讨论】:
-
你使用什么编译器版本?
-
我正在使用 MSVC 2015 RC。
-
我很好奇你为什么不想使用 var,因为它已经通过值传递给你,所以它已经是你自己的变量的本地副本。立即宣布另一个喜欢它似乎是多余的。具体来说,
var是auto,因此它丢失了任何引用属性等,而x是decltype(var)。 -
好的 - 我现在明白了 - 我读到你的第一行说你不想使用模板。但是你理想的代码是一个模板,所以我想它只是你想要避免的仿函数/类,对不起。
-
我的代码中真正的 lambda 是不同的,我实际上并没有创建变量,但是我使用 decltype 来访问一个类的静态成员。