Während der Entwicklung einer Anwendung hatte ich das folgende Problem. Ich wollte eine leere std::list<string>
zurückgeben, wenn ein gegebener Funktionszeiger Null war, oder das Ergebnis dieser Funktion andernfalls. Dies ist eine vereinfachte Version meiner Code:Ternärer Operator + C++ 11 Konstruktor aus Initialisiererliste
typedef std::list<std::string> (*ParamGenerator)();
std::list<std::string> foo() {
/* ... */
ParamGenerator generator = ...;
if(generator)
return generator();
else
return {};
}
Allerdings habe ich in der Regel die ternäre verwenden möchten (?:
) Betreiber in diesen Fällen, also versuchte ich es auf diese Weise mit (wie üblich):
return generator ? generator() : {};
Aber habe diesen Fehler:
somefile.cpp:143:46: error: expected primary-expression before ‘{’ token
somefile.cpp:143:46: error: expected ‘;’ before ‘{’ token
bedeutet das kann ich nicht den ternären Operator verwenden, um Objekte zurück von einem initializer_list
ihren Konstruktor erstellt? Gibt es dafür einen besonderen Grund?
Mein Rat wäre: ** Tun Sie das überhaupt nicht **. Machen Sie es zu einem generischen Algorithmus, der einen Iterator (dessen Typ ein Template-Parameter ist) verwendet. Wenn Sie also feststellen, dass 'std :: list' eine schlechte Wahl ist, können Sie relativ problemlos zu etwas anderem wechseln. –
@JerryCoffin Ich werde wahrscheinlich diesen Rat nehmen;). Ich würde gerne wissen, ob es überhaupt möglich ist (oder warum es nicht möglich ist). – mfontanini
Okay, fair genug. Es ist eine interessante Frage (für die ich mich entschieden habe), obwohl ich denke, dass die genaue Anwendung wahrscheinlich nicht die beste ist. –