Возможно ли инициализировать статическую переменную с lambda?
Я пробовал это:
#include <map>
int main() {
static std::map<int,int> myMap = [](){
std::map<int,int> myMap;
return myMap;
};
}
Ошибка:
<stdin>: In function 'int main()':
<stdin>:8:3: error: conversion from 'main()::<lambda()>' to non-scalar type 'std::map<int, int>' requested
И да, я знаю, что я могу создать для него еще одну "нормальную" функцию ant, но lambdas не может инициализировать объекты таким образом.
Ответы
Ответ 1
Да, это действительно возможно.
static std::map<int,int> myMap = [](){
std::map<int,int> myMap;
return myMap;
}();
Обратите внимание на ()
в конце. Вы назначаете myMap
лямбда, но вы действительно хотите назначить его на результат лямбда. Вы должны назвать это для этого.