2017-12-01 1 views
-2

Warum ist dieser Code ungültig ?. Ich weiß nicht, ob ich das Lambda-Syntax korrekt benutze, aber basierend auf anderen Posts sieht es gut aus.Versuch, Lambda-Funktion in statischer Funktion (C++)

struct foo{ 
    static int faa(int x); 
}; 

int foo::faa(int x){ 
    bool isCon = []() { 
     return true; 
    }; 

    return isCon(); 
} 
+2

Was ist der spezifische Fehler, den Sie bekommen? – Barmar

+2

ein Lambda ergibt einen unbestimmten Typ, nicht ein 'bool', verwenden' auto isCon = ' – vu1p3n0x

+0

Related: https://stackoverflow.com/questions/7951377/what-is-the-type-of-lambda-when-deduced -mit-automatisch-in-c11 – Barmar

Antwort

1

Lambdas haben unbestimmten Typ, so können Sie nicht wissen, welchen Typ man haben wird. Offensichtlich Sie das Lambda definiert werden nicht vom Typ Bool sein (es ein bool zurückgeben kann, aber es ist nicht ein), so können Sie diese stattdessen tun würden:

struct foo{ 
    static int faa(int x); 
}; 

int foo::faa(int x){ 
    auto isCon = []()->bool { 
     return true; 
    }; 

    return isCon(); 
} 

Hier ist das auto Schlüsselwort teilt den Compiler ableiten der Typ für dich. Der Ausdruck ->bool sagt dem Compiler, dass das Lambda ein Bool zurückgibt.

Allerdings gibt Ihre foo::faa() Funktion einen int zurück, so dass ein Cast möglicherweise stattfindet, weil Ihr Lambda einen Bool zurückgeben kann (was nichts mit der Frage zu tun hat, aber passen Sie auf).

Verwandte Themen