2013-03-22 13 views
12

Ho provato questo:è possibile inizializzare la variabile statica con lambda?

#include <map> 

int main() { 

    static std::map<int,int> myMap = [](){ 
    std::map<int,int> myMap; 
    return myMap; 
    }; 

} 

errore:

<stdin>: In function 'int main()': 
<stdin>:8:3: error: conversion from 'main()::<lambda()>' to non-scalar type 'std::map<int, int>' requested 

E sì, so che posso creare un'altra funzione 'normale' per questo formica funziona, ma lambda non è possibile inizializzare oggetti di tale modo.

risposta

31

Sì, è effettivamente possibile.

static std::map<int,int> myMap = [](){ 
    std::map<int,int> myMap; 
    return myMap; 
}(); 

Nota il () alla fine. Stai assegnando myMap a un lambda, ma vuoi davvero assegnarlo al risultato del lambda. Devi chiamarlo per quello.

+0

Penso che ci sia mancato '-> std :: map ' all'interno della dichiarazione lambda. – theV0ID

+3

@ theV0ID, il tipo restituito non è necessario su un lambda se può essere dedotto dall'istruzione return (come può qui). (Nota a margine: se l'elenco dei parametri è vuoto, come è qui, è anche opzionale, quindi può essere scritto usando: 'static auto myMap = [] {return std :: map ();}(); ') –

Problemi correlati