C++ gleiche Funktion Parameter mit unterschiedlichen Rückgabetyp

Muss ich einen Weg finden, zu verspotten, eine überladung einer Funktion Rückgabe-Typ in C++.

Ich weiß, dass es nicht eine Möglichkeit, das zu tun direkt, aber ich hoffe, es gibt einige out-of-the-box so sein.
Wir erstellen eine API für Benutzer, die arbeiten unter, und Sie werden Vorbeigehen in einen Daten-string, der ruft einen Wert basierend auf der string-Informationen. Diese Werte werden verschiedenen Arten. Kurzum, wir möchten, Sie tun zu lassen:

int = RetrieveValue(dataString1);
double = RetrieveValue(dataString2);
//Obviously, since they don't know the type, they wouldn't use int =.... It would be:
AnotherFunction(RetrieveValue(dataString1)); //param of type int
AnotherFunction(RetrieveValue(dataString2)); //param of type double

Aber das funktioniert nicht in C++ (offensichtlich).
Jetzt haben wir es so eingerichtet, dass Sie rufen:

int = RetrieveValueInt(dataString1);
double = RetrieveValueDouble(dataString2);

Wir jedoch nicht möchten, dass Sie wissen müssen, was die Art Ihrer Daten-string ist.

Leider sind wir nicht erlaubt die Verwendung von externen Bibliotheken, also nicht mit Boost.

Gibt es irgendwelche Möglichkeiten dies zu umgehen?

Nur um zu klären, ich verstehe, dass C++ nicht nativ tun es. Aber es muss einen Weg, um es. Zum Beispiel dachte ich über das tun RetrieveValue(dataString1, GetType(dataString1)). Dass nicht wirklich alles reparieren, weil GetType auch kann nur ein zurück geben. Aber ich brauche sowas.

Ich verstehe, dass diese Frage gestellt wurde, bevor, aber in einem anderen Sinn. Ich kann nicht Sie die offensichtlichen Antworten. Ich brauche etwas, was völlig out-of-the-box für Sie, um nützlich zu sein für mich, das war nicht der Fall mit einer der Antworten in der anderen Frage gefragt.

  • Wie werden Sie wissen, welche Art zuordnen, um das Ergebnis der Funktion zu?
  • Sie werden versuchen, zu Folgen ein schlechter Weg. Die verschiedenen Typen sind unterschiedliche Typen und verschiedene Funktionen verschiedene Funktionen. Diese Art von syntaktischen überladen wird keinen Mehrwert. Stattdessen wird es unnötig Komplex zu deinem code. Tun Sie es nicht.
  • möglich, Duplikat der Puzzle: Überlast eine C++ - Funktion nach dem return-Wert
  • Sie zeigen eine tatsächliche Art und Weise Sie wollen, dass diese Funktion aufgerufen werden? Und int x = RetrieveValue(...) Ist es nicht, weil Sie angeben, int, die für x, bricht eine Ihrer Bedingungen. Ich denke, diese Frage ist schlecht durchdacht.
  • Ja, ich hab int = RetrieveValue(...) nur als einfaches Beispiel. Sie werden tatsächlich den Aufruf der Funktion innerhalb einer anderen Funktion. So könnte es sein: AnotherFunction(RetrieveValue(...),param);
  • Diese Frage ist nicht beantwortbar in seiner aktuellen form, als pro Seths Kommentare. EDIT: Vielleicht Editiere deine Frage, um ein Beispiel von dem, was der echte code sieht wie auf dem Kommentar über mir?
  • Es wird fügen Sie einige Komplikation, aber haben Sie sich Gedanken über die Besucher-Muster?
  • Die Methode, die die akzeptierte Antwort auf das link @bo-persson kommentiert wäre der Weg, es zu tun. Allerdings wäre es besser, eine andere Methode verwenden, wenn möglich. also zurück ein Typ, der überladen hat benutzerdefinierte Konvertierung Operatoren.
  • das funktioniert überhaupt nicht, weil er die Weitergabe der Rückgabewert in eine überladene Funktion. Diese Funktionalität kann nicht getan werden zur compile-Zeit.
  • hatte nicht gesehen, dass Teil. Und auch die API-Teil - ich sicherlich würde nicht empfehlen, diese Technik für eine API. Kann nützlich sein, in einer property-system obwohl.
  • Ich kann immer noch nicht sehen, dass der Teil in der Tat.
  • Ich glaube, du bist mit der falschen Sprache. Tun Sie wirklich brauchen, um die Verwendung von C++ für das?
  • siehe sein Kommentar stackoverflow.com/questions/14840173/...
  • ich sehe jetzt.
  • ist dataString1 eine compile-Zeit-Konstante? oder eine Laufzeit-variable?
  • es ist eine Compilezeit-Konstante. Ein string, eine Referenz, die tiefer in das system bestimmt den Typ.

InformationsquelleAutor Josh Johnson | 2013-02-12
Schreibe einen Kommentar