首先,我知道我可以使用模板化的class/functor,但这不是我想要的。
这里是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
};
发布于 2015-07-03 02:25:35
如果您确实不需要这个参数,只需将其封装在void
中即可
auto lambda = [](auto var) {
(void)var; // now we used it - more or less
decltype(var) x;
/* whatever else */
};
发布于 2015-07-03 02:31:18
不要使用lambda:
template<typename T>
struct Functor
{
void operator () () { T var; ... }
}
lambda只是一个编译器生成的functor。
发布于 2015-07-03 02:26:48
这不是lambdas的用途,也没有语法可以做到这一点(除了删掉警告)。
只需编写一个合适的函数模板即可。并不是所有的东西都必须是lambda。
https://stackoverflow.com/questions/31191873
复制相似问题