Przede wszystkim wiem, że mogłem użyć szablonowej klasy/funktora, ale to nie jest to, czego chcę.Czy ogólna lambda nie ma argumentów?
Oto lambda:
auto lambda = [] (auto var) {
decltype(var) x;
//do stuff with x but nothing with var
};
Problemem jest to, że otrzyma ostrzeżenie C4100 (przypisań parametr formalny). Wiem też, że mógłbym używać sztuczek, takich jak wyłączanie ostrzeżenia i włączanie go ponownie po lambda lub przy użyciu makr, takich jak UNREFERENCED_PARAMETER, ale to jest oszukiwanie.
Czy mogę to osiągnąć?
Idealnym kod będzie wyglądać następująco:
template <typename T>
auto lambda = []() {
T x;
//do stuff with x
};
Jakiej wersji kompilatora używasz? – tadman
Używam MSVC 2015 RC. – Nighteen
Jestem ciekawy, dlaczego nie chcesz używać var, ponieważ został przekazany do ciebie według wartości, więc jest to już twoja lokalna kopia zmiennej. Natychmiastowe ogłaszanie drugiego takiego wydaje się zbędne. Konkretnie, 'var' to' auto', więc stracił wszelkie właściwości odniesienia itp., Podczas gdy 'x' to' decltype (var) '. – kfsone