Ich habe eine Funktion:Disallow implizite Konvertierungen in Funktionsaufruf in int
void foo(int n) {
std::cout << "foo(int)\n";
}
die verschiedenen Argumenten aufgerufen werden kann, kann es char, double, float usw. sein .:
foo(123); // 1
foo('c'); // 2
foo(0.2); // 3
foo(0.2f); // 4
// ...
. .. aber ich möchte nur int
Argumente (Literal oder Variable) erlauben, so dass 2,3,4, ... oben wäre illegal. Meine aktuelle Lösung ist, diese Überlastungen mit löschen:
void foo(char) = delete;
void foo(float) = delete;
void foo(double) = delete;
aber diese Liste von Überlastungen sein kann wirklich lang, und immer kann jemand eine Klasse schreiben, die implizit in int
umwandeln, was meine int
erlauben wird, nur verwenden Funktion in falsche Art und Weise, so dass ich das Schreiben (statt lange explizite Liste) gefunden:
funktioniert wie erwartet.
Gibt es Nachteile bei der Verwendung der Vorlage wie oben? Oder gibt es vielleicht bessere Möglichkeiten, dieses Problem zu lösen?
Was mit nicht (wirklich) 'int' Parameter _wrong_ ist? Wenn die Werte außerhalb des Bereichs Ihrer Funktion liegen, sollten Sie Ausnahmen "werfen". – edmz
@ AlgirdasPreidžius Der einzige Unterschied besteht darin, dass diese Frage im Grunde nach möglichen Nachteilen für die Antwort in dieser Frage fragt. – BoBTFish
Auch wenn diese Frage gut geschrieben ist, zeigt sie keinen Forschungsversuch, da die Suche nach dem genauen Titel mehrere Fragen zum selben Thema zeigt. –