Я пытаюсь использовать Lambda C++ 11 для инициализации переменной-члена const
класса.Можете ли вы использовать список «Лямбда в классе»?
Значительно упрощенный пример:
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_([]() -> int { return 42; })
{
}
int main()
{
Foo f;
}
В MSVC10 это дает:
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
В IDEONE это дает:
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
Я начинаю получить идею, что я не может использовать lambdas в списке инициализации класса.
Могу ли я? Если да, то какой правильный синтаксис?
+1: Да, я пытаюсь заполнить 'n_', возвращая значение из лямбда. –
@John См. Обновление. И я действительно вижу, как это может быть полезно с более сложной (многозадачной) лямбдой. –
Точно. В моем фактическом использовании я сохраняю размер файла только для чтения в байтах. –