metaprogramming

___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123metaprogrammierung ___ Metaprogrammierung ist die Fähigkeit, die Programmierumgebung wie bei Makros oder Metaklassen neu zu programmieren. ___ qstnhdr ___ Metafunktion, um x ^ n zu berechnen und den ganzzahligen Grenzwert ohne Überlauf zurückzugeben, wenn dies nicht möglich ist? ___ answer19877048 ___

Eine Version basierend auf SFINAE:

%Vor%

Anwendungsbeispiel:

%Vor%

Ausgabe:

%Vor%

Erläuterung:

Ein konstanter Ausdruck darf kein undefiniertes Verhalten [expr.const] / 2:

enthalten
  
  • eine Operation mit undefiniertem Verhalten [ Hinweis: einschließlich z. B. vorzeichenbehafteter Integer-Überlauf, bestimmter Zeigerarithmetik, Division durch Null oder bestimmte Schiebeoperationen   - Endnote ];
  •   

Immer dann, wenn unbounded %code% einen Überlauf erzeugt, ist der Ausdruck, der verwendet wird, um %code% zu deklarieren, kein gültiger konstanter Ausdruck. Substitution fehlschlägt und die Fallback-Funktion wird verwendet.

    
___ tag123integeroverflow ___ Der Ganzzahlüberlauf tritt auf, wenn das Ergebnis einer Operation größer als der Maximalwert ist, der durch den zugrunde liegenden Integertyp dargestellt werden kann. ___ tag123templatemetaprogramming ___ Template Metaprogrammierung ist eine Metaprogrammierungstechnik, bei der Templates von einem Compiler verwendet werden, um temporären Quellcode zu generieren, der vom Compiler mit dem Rest des Quellcodes zusammengeführt und dann kompiliert wird. ___ qstntxt ___

Betrachten Sie den folgenden Code:

%Vor%

Anstelle von %code% möchte ich %code% oder %code% zurückgeben, wenn %code% nicht durch %code% dargestellt werden kann. Die Schwierigkeit besteht darin, Überläufe während der Berechnung zu vermeiden, da sie bei der Kompilierung Fehler verursachen.

Wie geht das (ohne Boost)?

    
___ tag123c11 ___ C ++ 11 ist eine 2011 verabschiedete Version des C ++ - Sprachstandards. Sie hat viele Änderungen und Ergänzungen in der Kernsprache sowie der verbesserten und erweiterten C ++ - Standardbibliothek vorgenommen. ___
2
Antworten

std :: ratio Leistung eines std :: ratio zur Kompilierzeit?

Ich habe eine herausfordernde Frage aus einer mathematischen, algorithmischen und metaprogrammierenden Rekursionssicht. Betrachten Sie die folgende Erklärung: %Vor% basierend auf dem Beispiel der std::ratio Operationen wie std::ratio_...
06.11.2013, 21:30
2
Antworten

Python: Felder dynamisch zu Objekten hinzufügen

Ich frage mich, ob es möglich ist, dynamisch Objekte zu Objekten hinzuzufügen. Zum Beispiel möchte ich etwas wie hinzufügen können: %Vor% Wenn ich das in Python-Befehlszeileninterpretor ausführe, bekomme ich: %Vor% Irgendeine Idee?     
14.12.2010, 19:28
5
Antworten

Kann ich eine Template-Spezialisierung aus einer Typliste deklarieren?

Ziemlich sicher, ich kenne die Antwort schon, aber es ist einen Versuch wert. Sagen wir also, ich habe eine Typliste: %Vor% Das enthält einige Objekte: %Vor% Jetzt habe ich eine Template-Klasse ( baz ), die eines dieser Objekte aufn...
07.09.2015, 18:23
1
Antwort

Metafunktion, um x ^ n zu berechnen und den ganzzahligen Grenzwert ohne Überlauf zurückzugeben, wenn dies nicht möglich ist?

Betrachten Sie den folgenden Code: %Vor% Anstelle von /* something */ möchte ich std::numeric_limits<std::intmax_t>::min() oder std::numeric_limits<std::intmax_t>::max() zurückgeben, wenn Base^Exponent nicht durch st...
09.11.2013, 13:46