Questions marquées «templates»

La balise templates est utilisée dans plusieurs contextes: programmation générique (en particulier C ++) et génération de données / documents à l'aide de moteurs de modèles. Lorsque vous utilisez cette balise sur des questions lourdes d'implémentation - étiquetez le langage de code dans lequel l'implémentation est écrite

3
Comment puis-je créer un produit cartésien de listes de types en C ++?
Explicite. Fondamentalement, disons que j'ai des listes de types comme ceci: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Ils peuvent être des nombres variés de listes de types. Comment obtenir une liste de types de produits cartésiens? result = type_list< type_list<int, somestructB, double>, …

4
Conteneur STL avec un type spécifique comme argument générique
Existe-t-il un moyen de créer une fonction qui prend un conteneur avec un type spécifique (disons std::string) comme paramètre void foo(const std::container<std::string> &cont) { for(std::string val: cont) { std::cout << val << std::endl; } } et l'appeler pour chaque type de conteneur stl en entrée? comme ci-dessus? std::set<std::string> strset; std::vector<std::string> …


4
Comment appeler le bon constructeur d'un type de modèle?
Dans le code suivant, comment puis-je faire fonctionner la ligne commentée de la même manière que la ligne juste au-dessus? Je voudrais en faire un code générique, qui appelle le constructeur approprié d'un modèle Type. #include <string> #include <iostream> template <typename Type> struct Class { Type data; Class(Type data) : …




1
Clang a-t-il raison de rejeter le code dans lequel la classe imbriquée d'un modèle de classe est définie uniquement via des spécialisations?
Étant donné le modèle de classe suivant: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; nous définissons Innerséparément pour chaque spécialisation Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; puis définissez la fonction membre fune fois pour toutes les spécialisations de Outer: auto Outer<T>::f(Inner) -> …

2
Modèles de surcharge ambigus
J'ai le code modèle suivant #include <vector> #include <array> #include <iostream> template<typename T1> void foo(std::vector<T1> bar) { std::cout << "GENERIC" << std::endl; } template<typename T1> void foo(std::vector<std::vector<T1>> bar) { std::cout << "SPECIFIC (vector)" << std::endl; } template<typename T1, int SIZE> void foo(std::vector<std::array<T1, SIZE>> bar) { std::cout << "SPECIFIC (array)" << …
16 c++  templates 


3
Modèles variadiques: dépliez les arguments en groupes
J'ai une fonction qui prend deux arguments: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } Et un variadic qui devrait transmettre ses arguments par paires: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 …


1
Clang ne compile pas de code mais gcc et msvc l'ont compilé
Je ne comprends pas quel est le problème: soit dans mon code, soit dans le compilateur (moins possible). Il y a un morceau de code comme celui-ci: #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type …


3
La fonction de modèle ne fonctionne pas pour la fonction pointeur-sur-membre prenant const ref
Dernièrement, j'ai écrit une fonction de modèle pour résoudre certaines répétitions de code. Cela ressemble à ceci: template<class T, class R, class... Args> R call_or_throw(const std::weak_ptr<T>& ptr, const std::string& error, R (T::*fun)(Args...), Args... args) { if (auto sp = ptr.lock()) { return std::invoke(fun, *sp, args...); } else { throw std::runtime_error(error.c_str()); …
14 c++  templates 

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.