Articles of métaprogrammation

Énumérer un enum en C ++

En C ++, est-il possible d’énumérer un enum (soit runtime ou comstack time (de préférence)) et les fonctions call / generate code pour chaque itération? Exemple d’utilisation: enum abc { start a, b, c, end } for each (__enum__member__ in abc) { function_call(__enum__member__); } Duplicata plausible: C ++: Itérer à travers un enum Enum en […]

Variable non définie dans Ruby

Disons que j’utilise irb , et tapez a = 5 . Comment puis-je supprimer la définition de a pour que taper a renvoie un NameError ? Un peu de contexte: plus tard je veux faire ceci: context = Proc.new{}.binding context.eval ‘a = 5’ context.eval ‘undef a’ # though this doesn’t work.

Est-ce que le calcul basé sur constexpr est complet?

Nous soaps que la métaprogrammation des modèles C ++ est terminée , mais pas la métaprogrammation des préprocesseurs . C ++ 11 nous donne une nouvelle forme de métaprogrammation: le calcul des fonctions constexpr. Cette forme de calcul Turing-complete? Je pense que puisque la récursivité et l’opérateur conditionnel (? 🙂 sont autorisés dans les fonctions […]

Supprimer / annuler la définition d’une méthode de classe

Vous pouvez définir dynamicment une méthode de classe pour une classe comme celle-ci: class Foo end bar = %q{def bar() “bar!” end} Foo.instance_eval(bar) Mais comment faire le contraire: supprimer / dé-définir une méthode de classe? Je soupçonne que les méthodes remove_method et undef_method du module peuvent être utilisées à cette fin, mais tous les exemples […]

Répartition des balises par rapport aux méthodes statiques sur des classes partiellement spécialisées

Supposons que je veuille écrire une fonction générique void f() , ce qui fait une chose si T est un type POD et une autre chose si T est un non-POD (ou tout autre prédicat arbitraire). Une façon d’y parvenir serait d’utiliser un modèle de répartition des balises comme le fait la bibliothèque standard avec […]

method_missing des pièges dans Ruby

Y a-t-il des choses à prendre en compte lors de la définition de la méthode method_missing dans Ruby? Je me demande s’il existe des interactions moins évidentes entre l’inheritance, le lancement d’exceptions, les performances ou autre chose.

Annotation personnalisée java: rendre un atsortingbut facultatif

J’ai défini ma propre annotation personnalisée @Target(value={ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface MyCustomAnnotation { Class myType(); } Comment puis-je rendre l’atsortingbut facultatif?

Trouver des classes disponibles dans un module

J’ai un module MyModule . Je charge dynamicment les classes dedans. Comment puis-je obtenir une liste des classes définies dans son espace de noms? Exemple: def load_plugins Dir.glob(File.dirname(__FILE__) + ‘/plugins/*.rb’) do |f| MyModule.class_eval File.read(f) end # now how can I find the new classes I’ve loaded into MyModule? end Je devrais dire que chaque f […]

Créer par programme des tableaux statiques au moment de la compilation en C ++

On peut définir un tableau statique au moment de la compilation comme suit: const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 }; Question 1 – Est-il possible d’utiliser différentes techniques de métaprogrammation pour affecter ces valeurs “par programmation” au moment de la compilation? Question 2 – En supposant […]

Définition de classe dynamic AVEC un nom de classe

Comment définir dynamicment une classe dans Ruby AVEC un nom? Je sais créer dynamicment une classe sans nom en utilisant quelque chose comme: dynamic_class = Class.new do def method1 end end Mais vous ne pouvez pas spécifier un nom de classe. Je veux créer une classe dynamicment avec un nom. Voici un exemple de ce […]