Ich habe Code, der eine Struktur als Rückgabetyp verwendet. Ich möchte eine Null-Instanz der Struktur als Fehler zurückgeben, aber die Dereferenzierungsversion der Struktur zurückgeben, wenn kein Fehler vorliegt. Wie kann ich dies mit nur einer Rückgabe in der gesamten Funktion tun? Ja, es ist sehr einfach, zwei Returns zu verwenden, aber ich muss nur einen Return verwenden.Wie verwendet man eine Rückgabe für einen Datentyp, um einen Fehler zurückzugeben?
Antwort
” Rückkehr eine Null-Instanz der Struktur als Fehler, aber die dereferenzieren Version der Struktur, wenn sie nicht einen Fehler zurück.
return (is_error? S() : *pointer_to_struct);
Wenn von Instanz null Sie bedeuten keine Standard initialisiert ein, dann können Sie einen C 17 ++ verwenden std::optional
oder ein boost::optional
(von der Boost-Bibliothek). Oder Sie können Ihre eigenen schnellen und schmutzigen Optional
rollen. Wenn Sie die Effizienz ignorieren können, ist es überhaupt nicht schwer:
template< class Wrapped >
class Optional
{
private:
vector<Wrapped> data_;
public:
auto is_empty() const -> bool { return data_.empty(); }
auto ref() -> Wrapped& { return data_.at(0); }
auto ref() const -> Wrapped const& { return data_.at(0); }
Optional() {}
Optional(Wrapped value) { data_.push_back(move(value)); }
};
Haftungsausschluss: Code nicht durch Hände des Compilers berührt.
Ich bin neu in der Programmierung. Ist is_error ein in C++ geschriebenes Makro? Wenn ja, in welchem Header ist es? Vielen Dank! – teenHere
@teenHere: Nein, es ist nicht eingebaut. Es ist nur ein Beispiel. –
Wie kann ich dies mit nur einer Rückkehr in der gesamten Funktion tun?
Sie können std::optional seit C verwenden ++ 17 (oder Boost.Optional), z.B.
std::optional<some_struct> foo() {
if (...)
return something;
else // error
return {};
}
dann
if (auto result = foo()) {
// use result.value() to get some_struct
// ...
} else {
// error
}
Unterhalb von 'std :: C++ 17' können Sie [' boost :: qptional'] verwenden (http://www.boost.org/doc/libs/1_61_0/libs/optional/doc/html/ index.html) (nur Header-Bibliothek). –
- 1. indexOf() -Funktion, um einen Wert -1 zurückzugeben
- 2. Wie abfragen, um einen Postgres `Record` Datentyp
- 3. Groovy/Grails, wie man einen Datentyp ermittelt?
- 4. Bash-Befehl, um einen freien Port zurückzugeben
- 5. Verwenden von jquery, um einen Attributwert zurückzugeben
- 6. wie einen Referenz-Datentyp
- 7. Korrekter Weg, um einen Fehlercode für die Funktion zurückzugeben size_t
- 8. Wie definiert man einen Datentyp in Typoskript für Arrays?
- 9. Welche Werte für einen Array-Datentyp verwendet werden sollen
- 10. Wie man einen Fehler in Python zurückgibt
- 11. Wie richte ich Apache ein, um einen Code 204 zurückzugeben?
- 12. Wie erstelle ich eine beliebige Instanz für einen rekursiven Datentyp?
- 13. Wie schreibe ich eine Kurzschrift für einen Datentyp in Scala
- 14. Wie verwendet man jQuery, um einen nicht-modalen Dialog anzuzeigen?
- 15. Wie durchläuft Array in Ocaml, um einen Wert zurückzugeben?
- 16. nicht, einen selbstdefinierte Datentyp
- 17. Wie man String.format verwendet, um einen formatierten Titel zu erstellen
- 18. Quill cassandra, Codec nicht gefunden Fehler für einen benutzerdefinierten Datentyp
- 19. C#: Wie man einen Typkonverter verwendet, um enums zu lokalisieren
- 20. Wie verwendet man regulären Ausdruck, um einen Teilzeichenfolgewert zu ersetzen?
- 21. Wie man MarkerClusterer - Schritt-für-Schritt für einen Neuling verwendet
- 22. einen Datentyp für eine C-Bibliothek in C Casting ++
- 23. Wie erstellt man einen ToJSON/FromJSON-Eintrag für einen algebraischen Datentyp mit mehreren Konstruktoren ohne Argumente?
- 24. Wie man einen Postman Mock Server verwendet
- 25. Wie man einen goroutin Pool verwendet
- 26. Wie man eine Seite davon abhält, einen Fehler von 500 zurückzugeben
- 27. Wie verwendet man Kartentypen um einen Typ für `Object.keys` zu definieren?
- 28. Wie erhalten Sie einen Bereich, um seinen Namen zurückzugeben?
- 29. OPC UA Wie man einen Datentyp vom Server
- 30. Wie man .filter() verwendet, um eine Übereinstimmung in einem Array zurückzugeben (rethinkdb)
wäre es besser, wenn Sie ein Beispiel hinzufügen, was Sie zu tun versuchen. – HazemGomaa