Dupliquer possible: reflection minimale en C ++ Fondamentalement, j’ai le nom de classe stocké dans char * , comment puis-je créer une instance de cette classe. Ce qui suit est ce que je pensais. Cela fonctionne lorsque je passe Test tant que paramètre de modèle, ce qui est correct, mais si j’essaie quelque chose comme […]
Voici quelques modèles de code C ++ de Programming Language Pragmatics, par Scott template class chooser { public: virtual bool operator()(const T& a, const T& b) = 0; }; template class arbiter { T* best_so_far; C comp; public: arbiter() { best_so_far = nullptr; } void consider(T* t) { if (!best_so_far || comp(*t, *best_so_far)) best_so_far = […]
Je cherche un moyen efficace de vérifier si une variable POD est modifiée entre deux cycles. J’ai trouvé cette solution: class Foo { public: template bool isChanged(T& entry); void endCycle(); private: std::map entryMap; // std::mapoldVals; // }; template bool Foo::isChanged(T& entry) { entryMap[&entry] = sizeof(T); if(oldVals[&entry] == NULL) return false; if(memcmp(&entry, oldVals[&entry], entryMap[&entry])) return true; […]
Supposons que vous tentiez d’effectuer les opérations suivantes: template typename std::enable_if::type static auto hope( /*args*/) -> decltype( /*return expr*/ ) { } Est-il possible de combiner l’inclusion / surcharge conditionnelle ( std::enable_if ) avec le type fin-retour ( auto … -> decltype() )? Je ne serais pas intéressé par les solutions utilisant le préprocesseur. Je […]
Voici le code suivant qui montre un dessin que j’utilise. J’ai créé une classe wrapper qui encapsule une classe template. Une méthode du wrapper permet à un commutateur de choisir la spécialisation que je veux: #include #include /* Interface */ struct IFoo { virtual void lol(void) = 0; }; /* Template Specialization */ template class […]
Disons que j’ai différentes fonctions, qui ont un nombre variable d’arguments. Le premier argument est toujours un pointeur obtenu par d’autres moyens. Tous les autres arguments que j’obtiens par le biais d’un autre modèle utilisant l’extension de pack de modèles. Le modèle que j’utilise pour appeler ces fonctions est le suivant: template inline RT call(RT(*function)(Args…)) […]
Disons que j’ai une classe avec un argument de modèle entier. Comment pourrais-je append une fonction prenant N arguments d’un type donné? Si possible, j’aimerais éviter enable_if et les likes. Ce que je fais actuellement c’est: template class Foo { template using to = To; public: template void Bar(to… args) // Some arguments of type […]
J’ai écrit un modèle d’adaptateur pour deux types A et B qui est supposé adapter les types. Ceci est juste une classe de template normale. Le problème est que je dois convertir de A à B. Je ne connais pas les types de A et de B, mais je les fournirai plus tard en se […]
Y at-il un moyen, comment passer un nom de méthode en tant que modèle parametr après std::declval() ? Jusqu’à présent, j’ai ceci: template struct MethodInfo { using type = decltype(std::declval().foo(std::declval() …)) (T::*)(Args …); }; Mais je voudrais que le ” foo ” soit un template parametr.
Je souhaite spécialiser une fonction pour un sous-ensemble de classes qui: ont une certaine variable de membre de données statique, et cette variable n’a que certaines valeurs possibles Le code ci-dessous illustre l’intention, mais il ne comstack que si je commente les lignes relatives aux classes B dans main . En effet, le code n’est […]