2013-03-22 25 views
12

Bu denedim:statik değişkeni lambda ile başlatmak mümkün mü?

#include <map> 

int main() { 

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

} 

hatası:

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

Ve evet, ben karınca çalıştığını ancak lambda'lar bu nesneleri başlatılamıyor için başka bir 'normal' fonksiyonu oluşturabilir biliyoruz yol.

cevap

31

Evet, gerçekten mümkün.

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

Sonunda ()'u not edin. Bir lambdaya myMap atayacaksınız, ancak lambda'nın sonucuna gerçekten atamak istiyorsunuz. Bunun için onu aramak zorundasın.

+0

Sanırım lambda bildirimi içinde '-> std :: map ' eksik. – theV0ID

+3

@ theV0ID, dönüş ifadesinden çıkarılabiliyorsa, dönüş türü bir lambda gerekli değildir (burada olduğu gibi). (Yan not: Burada olduğu gibi parametre listesi boşsa, ayrıca isteğe bağlıdır. Bu, aşağıdaki kullanılarak yazılabilir: "statik otomatik myMap = [] {return std :: map ();}(); ') –

İlgili konular