Unbegrenztes Limit für numeric_limitT :: max () angeben?

8

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.

%Vor%     
jww 23.12.2016, 15:08
quelle

2 Antworten

5

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.

    
Christian Hackl 23.12.2016 15:15
quelle
1

zu dieser Frage:

  

An diesem Punkt ist mein Takeaway OK, um numeric_limit für meine Ganzzahl zu spezialisieren

Die Antwort ist Ja, weil:

  1. Es ist eine Spezialisierung einer Standardvorlage und

  2. 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.

    
Richard Hodges 23.12.2016 15:41
quelle

Tags und Links