Ich habe eine beliebige Integer
Klasse, was im Vergleich zu Java BigInteger
oder OpenSSL BIGNUM
sehr ähnlich ist. Ich habe Probleme zu verstehen, wie ich ein unbegrenztes Limit für numeric_limit<Integer>::max()
ausdrücken sollte.
Stack Overflow hat ein paar Fragen, die fragen, ob es OK ist zu tun (wie Ist es in Ordnung, std :: numeric_limits für benutzerdefinierte zu spezialisieren number-like classes? ), und einige Antworten mit einigen Beispielen, die primitive verwenden, aber ich habe kein Beispiel gesehen, das eine willkürliche Ganzzahl-Klasse verwendet. Ich besuchte auch die Referenzseite std :: numeric_limits , aber es ist mir nicht klar, was ich in dieser Situation tun sollte .
An dieser Stelle ist mein Takeaway OK, um numeric_limit
für mein Integer
zu spezialisieren, und OK, um es in den Standard-Namespace einzufügen. Ich muss auch alle numeric_limits
spezialisieren.
Wie definiere ich ein unbegrenztes Limit für numeric_limit<T>::max()
?
Im Folgenden finden Sie die <limits>
(OS X-Maschine) von GCC 4.2.1.
Der Standard sagt Folgendes über die max
-Memberfunktion in §18.3.2.4:
Sinnvoll für alle Spezialisierungen, in denen
is_bounded != false
.
Sie sollten also is_bounded
false
eingeben und in der Dokumentation für Ihre Anwendung angeben Klasse, dass es nicht sinnvoll ist, std::numeric_limits<T>::max
darauf zu setzen.
zu dieser Frage:
An diesem Punkt ist mein Takeaway OK, um numeric_limit für meine Ganzzahl zu spezialisieren
Die Antwort ist Ja, weil:
Es ist eine Spezialisierung einer Standardvorlage und
es ist spezialisiert auf einen benutzerdefinierten Typ.
Aus cppreference:
Das Hinzufügen von Vorlagenspezialisierungen für jede Standardbibliotheksvorlage zur Namespace-Standarddatei ist nur dann zulässig, wenn die Deklaration von einem benutzerdefinierten Typ abhängt und die Spezialisierung alle Anforderungen für die ursprüngliche Vorlage erfüllt, sofern diese Spezialisierungen nicht zulässig sind.
Tags und Links c++ c++03 numeric-limits