Preguntas etiquetadas con templates

La etiqueta de plantillas se usa en múltiples contextos: programación genérica (especialmente C ++) y generación de datos / documentos mediante motores de plantillas. Cuando utilice esta etiqueta en la implementación, preguntas pesadas: etiquete el lenguaje de código en el que está escrita la implementación.

1
¿Es correcto Clang para rechazar el código en el que la clase anidada de una plantilla de clase se define solo a través de especializaciones?
Dada la siguiente plantilla de clase: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; Definimos Innerpor separado para cada especialización de Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; y luego defina la función miembro funa vez para todas las especializaciones de Outer: auto Outer<T>::f(Inner) …

2
Plantillas de sobrecarga ambiguas
Tengo el siguiente código con plantilla #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
Plantillas variables: desplegar argumentos en grupos
Tengo una función que toma dos argumentos: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } Y una variable que debe reenviar sus argumentos en pares: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 …


1
Clang no compila código, pero gcc y msvc lo compilaron
No entiendo cuál es el problema: ya sea en mi código o en el compilador (menos posible). Hay un código como este: #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 {}; template<typename T> struct TestA<T, …


3
La función de plantilla no funciona para la función de puntero a miembro tomando const ref
Últimamente escribí una función de plantilla para resolver algunas repeticiones de código. Se parece a esto: 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 


3
Ejecutar la función dentro de la plantilla de función solo para aquellos tipos que tienen la función definida
Tengo una plantilla de función que toma muchos tipos diferentes como entrada. De esos tipos, solo uno de ellos tiene una getInt()función. Por lo tanto, quiero que el código ejecute la función solo para ese tipo. Por favor sugiera una solución. Gracias #include <type_traits> #include <typeinfo> class X { public: …

6
¿Cómo comparar estructuras genéricas en C ++?
Quiero comparar estructuras de forma genérica y he hecho algo como esto (no puedo compartir la fuente real, así que solicite más detalles si es necesario): template<typename Data> bool structCmp(Data data1, Data data2) { void* dataStart1 = (std::uint8_t*)&data1; void* dataStart2 = (std::uint8_t*)&data2; return memcmp(dataStart1, dataStart2, sizeof(Data)) == 0; } Esto …


1
Definición de C ++ 20 fuera de clase en una clase de plantilla
Hasta el estándar C ++ 20 de C ++, cuando queríamos definir un operador fuera de clase que usara algunos miembros privados de una clase de plantilla, usaríamos una construcción similar a esta: template <typename T> class Foo; template <typename T> constexpr bool operator==(T lhs, const Foo<T>& rhs); template <typename …
12 c++  templates  c++20 

2
Pasar un concepto a una función
Dado que los conceptos se definen como predicados en tiempo de compilación, ¿también es posible reutilizar estos predicados para algoritmos en tiempo de compilación? Por ejemplo, ¿sería posible verificar si todos los tipos de una tupla se ajustan a un concepto? Por lo que he visto, no es posible pasar …


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.