Articles of modèles

Comment créer une instance d’une classe lorsque le nom de la classe est stocké dans une autre variable

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 […]

Quand la vérification de type pour l’argument de type est-elle effectuée?

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 = […]

Vérifier les changements dans les variables POD

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; […]

Surcharge conditionnelle avec type retour-fin possible?

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 […]

Simuler le comportement du commutateur dans la spécialisation de modèles

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 […]

Utilisation de n arguments de Args… à partir de la position m

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…)) […]

Nombre d’arguments de fonction égal à l’entier du modèle

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 […]

Conversion de type C ++ Aribitrary (Dynamic)

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 […]

C ++ 11 – std :: declval () nom de la méthode

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.

Utilisation de enable_if pour ne faire correspondre que les classes qui ont un certain membre de données statique et qui n’ont que des valeurs spécifiques

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 […]