Articles of métaprogrammation

Comment prendre en charge les types de modèles variadic dans Visual Studio 2017

TC a donné ici une solution intelligente qui utilisait cet object: template struct overload : Ts… { using Ts::operator()…; }; template overload(Ts…) -> overload; struct fallback_t { template fallback_t(T&&) {} }; Malheureusement, je ne parviens pas à comstackr cela dans Visual Studio 2017. Je reçois les erreurs: 1> avertissement C4346: ‘Ts: :()’: le nom dépendant […]

Même déclaration deux types différents

J’aimerais pouvoir faire ceci: X type_0; X type_1; et je voudrais que type_0 et type_1 soient deux types différents. Comment puis-je le faire?

Changer la recherche d’exécution pour une compilation

J’essaie d’implémenter une bibliothèque générique ECS en C ++ à des fins d’apprentissage. Je pensais à beaucoup de façons de mettre en œuvre les choses mais je rencontre toujours un problème. Donc, si vous pouviez m’aider avec celui-ci: Disons que j’ai un constexpr hana::tuple de hana::type_c Components, quelque chose comme: struct C1 {}; struct C2 […]

obtenir le type d’origine de cet object

J’essaie d’utiliser la métaprogrammation pour éviter la duplication de code dans une structure parent-enfant. Je l’ai fait fonctionner jusqu’à un certain point. Le code affiché dans les compilateurs du bas et fonctionne correctement, mais certaines relations ( /*Tree_tag,*/ et /*Parasite_tag*/ ) sont commentées. Si non commenté, MSVS2017 indique error C2664: ‘void Obj<std::tuple,std::tuple>::removeParent(const Obj<std::tuple,std::tuple> *const )’: […]

Dois-je spécialiser des modèles si leur code incriminé est dans un if (faux)

Compte tenu de la hiérarchie: struct base {}; struct a : public base {}; struct b : public base {}; Je souhaite remplir le vector vecBase et le vector aVec avec cette fonction: template void foo(T* bar) { if (is_base_of_v) baseVec.push_back(static_cast(bar)); if (is_base_of_v) baseVec.push_back(static_cast(bar)); } Le problème ici est que même si la static_cast ne […]

Comment dois-je appeler toutes les fonctions d’un pack de parameters variés si le type de retour de fonction est vide?

J’ai un pack de parameters complet d’objects par défaut ExampleFunctor construits puis ExampleFunctor (comme ExampleFunctor ) et que ExampleFunctor souhaite appeler tous dans l’ordre (de gauche à droite). Si le type de retour est autre que nul, je peux utiliser une liste d’initialiseurs pour le faire: struct ExampleFunctor{ void operator()(){someGlobal = 4;} }; template struct […]

Implémentation de std :: rank pour d’autres conteneurs

Explication: std :: rank ne fonctionne que pour les tableaux de style c. J’ai donc implémenté un rank similaire pour std::vector qui fonctionne bien: #include #include template struct integral_constant { static constexpr Type value =val; }; template struct rank : public integral_constant { }; template struct rank< std::vector > : public integral_constant<std::size_t, 1 + rank::value> […]

Relier une jolie imprimante pour booster :: les acteurs de phénix lors d’une itération avec boost :: fusion

Cette question fait suite aux pointeurs destinés aux membres du groupe lors d’une itération avec boost :: fusion , où la solution acceptée fonctionne. Maintenant, je veux non seulement append les valeurs (primitives) à la carte de propriétés, mais utiliser une jolie imprimante pour améliorer l’affichage des valeurs. Ce mécanisme sera également utilisé au cas […]

boost :: mpl :: fold pour une abstraction à double paramètre

J’ai une classe appelée caRender, qui fournit une méthode caRender :: renderClientObject () par type d’object donné dans clientObjectTypes. Donc, le code suivant extrait montre cette situation en cours d’exécution: #define UNUSED(x) (void)(x) typedef boost::mpl::vector clientObjectTypes; template struct methodForward{ virtual void renderClientObject(T* clientObject, Controller::QtOpenGL::cQOpenGLContext* glContext) { UNUSED(clientObject); UNUSED(glContext); }; }; struct base { template struct […]

Construire une liste de types pendant la compilation – pas de C ++ 11

J’aimerais faire exactement cela pour obtenir une liste de types / classes. Mais je ne peux pas utiliser C ++ 11. Avez-vous une suggestion pour append un type à la liste de modèles? Edit: du code à ce que j’aimerais faire: #include #include #include #include #include using namespace std; class A {}; class B {}; […]