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

Affe, der in C # patcht

Ist es möglich, den Code einer C # -Klasse zur Laufzeit zu erweitern oder zu modifizieren? Meine Frage dreht sich speziell um Monkey Patching / Duck Punching oder Meta Object Programming (MOP), wie es in Skriptsprachen wie Groovy, Ruby etc. v...
27.12.2010, 10:20
2
Antworten

Groovy Meta-Programmierung - Hinzufügen von statischen Methoden zu Object.metaClass

Ich habe ein Groovy-Metaprogrammierungsproblem festgestellt, das ich nicht lösen kann. Beim Hinzufügen der statischen Methode foo () zur Klasse FooBar funktioniert FooBar.foo () wie erwartet: %Vor% Allerdings füge ich stattdessen die glei...
22.09.2009, 22:21
1
Antwort

Übernehmen Sie die Funktion für jedes Element im Parametersatz

Ich habe folgende Template-Funktion mit Spezialisierung: %Vor% Wenn ich dann eine variable Template-Funktion habe wie: %Vor% Gibt es eine Möglichkeit, das Parameterpaket mithilfe der Konvertierungsfunktion wie im Kommentar zu konvertiere...
16.12.2017, 18:46
2
Antworten

Wie stellst du fest, dass Affe-Patching in Ruby aufgetreten ist?

Wie überprüfen Sie, ob in einer bestimmten Klasse in Ruby Affe gepatcht wurde? Wenn das möglich ist, ist es auch möglich, die vorherige (n) Implementierung (en) des Attributs zu erhalten, das gepatcht wurde?     
02.12.2008, 21:30
1
Antwort

Gibt es eine Nicht-Template-Metasprache für C ++?

Ich lese das C ++ Template-Metaprogrammbuch von den boost :: MPL-Autoren. Ich bin ein großer Fan der Spirit / Phoenix-Bibliotheken. Aber ich habe mich gefragt. Die Verwendung von Vorlagen für die C ++ - Meta-Programmierung ist mühsam. Es war...
25.01.2014, 19:28
2
Antworten

Kann ich dynamisch eine Ruby-Methode definieren, die einen Block akzeptiert?

Ich weiß, dass ich Methoden für eine Klasse dynamisch definieren kann, indem ich define_method verwende, und dass ich die Parameter festlege, die diese Methode unter Verwendung der Arität des Blocks verwendet. Ich möchte eine Methode dynam...
27.09.2011, 00:20
2
Antworten

Name einer Python-Funktion in einem Stack-Trace

In Python2 und Python3 wird im Stack-Trace der __name__ einer Funktion nicht verwendet, stattdessen wird der ursprüngliche Name (der nach def angegeben wird) verwendet. Betrachten Sie das Beispiel: %Vor% Die Ausgabe ist: %Vor% W...
17.11.2016, 17:50
2
Antworten

So erstellen Sie Funktionen auf Modulebene aus Methoden in einer Klasse dynamisch

Ich versuche, Funktionen auf Modulebene dynamisch aus den Methoden einer Klasse zu erstellen. Daher möchte ich für jede Methode in einer Klasse eine Funktion mit demselben Namen erstellen, die eine Instanz der Klasse erstellt und dann die Method...
08.09.2010, 02:45
1
Antwort

Wie funktioniert diese veraltete Methode?

Ich habe versucht, diesen Anruf zu verstehen: %Vor% , die diese veraltete Methode verwendet: %Vor% Ich verstehe die Metaprogrammierung, die hier verwendet wird, nicht wirklich. Aber ist dies nur eine andere Möglichkeit, die new_record?...
21.06.2009, 00:48
2
Antworten

Vorlagenfunktionen im Namespace verursachen Fehler

Nehmen Sie den folgenden Code an: %Vor% Aus irgendeinem Grund, den ich nicht verstehen kann, erzeugt es die folgenden Kompilierungsfehler mit g++-4.8 : %Vor% während clang 3.3 ergibt: %Vor% Wenn jedoch der Namespace Utils entfer...
28.08.2013, 16:51