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. ___
4
Antworten

Groovy Methodenüberwachung

In meiner Grails App habe ich das Quartz Plugin installiert. Ich möchte Aufrufe an jede Quarz-Jobklasse ' execute ' abfangen, um etwas zu tun, bevor die execute -Methode aufgerufen wird (ähnlich wie AOP vor dem Advice). Momentan versuche...
28.05.2013, 08:13
2
Antworten

conexpr vs Vorlage für die Kompilierzeit mathematische Funktionen?

Ich bin ziemlich verwirrt mit dem neuen Keyword constexpr von C ++ 2011. Ich würde gerne wissen, wo constexpr und wo Templates Metaprogrammierung verwenden, wenn ich kompilieren-Zeitfunktionen (vor allem mathematische Funktionen). Zum Beispiel,...
02.09.2012, 04:26
3
Antworten

Änderung von Haskells Functor für die Metaprogrammierung

Meine Kenntnisse der Kategorientheorie sind nicht sehr gut. Also bitte bitte mit mir. Ich habe Monaden gelesen und sah die folgende Definition. %Vor% Von dieser Seite habe ich gelesen, dass der Funktor-Typ in Haskells Vorspiel wirkli...
12.04.2015, 09:53
2
Antworten

"Mitglied ist privat", obwohl ich bei der Verwendung des abschließenden Rückgabetyps nicht von außen darauf zugreife

Wie kann ich das folgende Problem beheben? Ich schreibe eine funktionale Bibliothek, die die folgenden Funktionen definiert, die für diese Frage relevant sind: call(f,arg) : Ruft eine Funktion mit einem Argument auf. Nur ein Wrapper, d...
01.05.2013, 22:58
2
Antworten

Erstellen aller Template-Permutationen mit MPL

Ich habe die folgende Template-Klassenstruktur %Vor% Die Host-Klasse kann jetzt wie folgt aussehen: %Vor% Gibt es eine Möglichkeit, eine Typenliste mit boost :: mpl zu erstellen? Im Moment habe ich noch keine Idee, wo ich anfangen soll....
06.05.2011, 08:47
2
Antworten

Iterativ Filtern von Argumenten, die bei der Kompilierung mit einem Vergleichselement übereinstimmen

Kontext Erstens, ein Kontext: Ich benutze ein leeres struct namens nothing , um etwas ähnlich zu "normal void zu emulieren. " , um einige Interfaces zu verschönern, die darauf basieren, mehrere Funktionsobjekte aneinander zu ketten....
17.09.2017, 17:18
2
Antworten

Elixir-Makros und bind_quoted

Ich habe ein Makro, das ein Modul wie folgt definiert. %Vor% Die Ausgabe von running ist: %Vor% Was macht Sinn? MacroFun.define_module wurde in Runner.run aufgerufen, daher wurde das Modul definiert und somit unter dem Modul Runn...
20.01.2016, 00:19
1
Antwort

Vereinbaren Sie die verschiedenen Zitate Mechanismen in Julia Metaprogrammierung

Könnte jemand die verschiedenen für die Metaprogrammierung in Julia verfügbaren Quotierungsmechanismen klar darstellen und jede mit einem minimalen Beispiel illustrieren? Damit ist klar, was in welcher Situation zu verwenden ist ... So wei...
11.12.2016, 17:35
4
Antworten

Metaprogrammatisch Ruby-Methoden definieren, die Schlüsselwortargumente verwenden?

Struct lässt mich eine neue Klasse erstellen, die Argumente akzeptiert und eine nette Semantik hat. Die Argumente sind jedoch nicht erforderlich, und ihre Reihenfolge erfordert die folgende Definition: %Vor% Ich möchte etwas ähnlich wie e...
24.10.2014, 18:16
5
Antworten

Eigenschaftsdeskriptor pro Instanz erstellen?

Normalerweise werden Python-Deskriptoren als Klassenattribute definiert. Aber in meinem Fall möchte ich, dass jede Objektinstanz unterschiedliche Deskriptoren hat, die von der Eingabe abhängen. Zum Beispiel: %Vor% Jedes Objekt hat unterschie...
03.05.2012, 17:34