Preguntas etiquetadas con template-meta-programming

La metaprogramación de plantillas es una técnica de metaprogramación en la que un compilador utiliza las plantillas para generar código fuente temporal, que el compilador fusiona con el resto del código fuente y luego lo compila.

27
¿Verificación de la existencia de una función miembro de clase?
¿Es posible escribir una plantilla que cambie el comportamiento dependiendo de si una determinada función miembro está definida en una clase? Aquí hay un ejemplo simple de lo que me gustaría escribir: template<class T> std::string optionalToString(T* obj) { if (FUNCTION_EXISTS(T->toString)) return obj->toString(); else return "toString not defined"; } Entonces, si …




3
¿Cómo puedo obtener la profundidad de un std :: vector multidimensional en tiempo de compilación?
Tengo una función que toma una std::vectordimensión multidimensional y requiere que se pase la profundidad (o el número de dimensiones) como parámetro de plantilla. En lugar de codificar este valor, me gustaría escribir una constexprfunción que tome std::vectory devuelva la profundidad como unsigned integervalor. Por ejemplo: std::vector<std::vector<std::vector<int>>> v = { …

4
Meta programación de plantillas
¿Alguien puede explicarme por qué la primera plantilla de metaprogramación va a un ciclo infinito, pero la segunda se ejecuta correctamente? #include <iostream> using namespace std; template<int N, int M> struct commondivs { static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val; }; template<int N> struct commondivs<N,N> { static …

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 …


1
Mala deducción de tipo al pasar el puntero de función sobrecargado y sus argumentos
Estoy tratando de proporcionar un contenedor std::invokepara hacer el trabajo de deducir el tipo de función incluso cuando la función está sobrecargada. (Hice una pregunta relacionada ayer para la versión de puntero variadic y método). Cuando la función tiene un argumento, este código (C ++ 17) funciona como se espera …

7
¿Es posible hacer coincidir parámetros de plantilla enteros recursivamente en C ++?
Tengo el siguiente problema. Defino un vector N dimensional como tal #include <vector> #include <utility> #include <string> template <int N, typename T> struct NVector{ typedef std::vector<typename NVector<N-1,T>::type> type; }; template <typename T> struct NVector<1,T> { typedef std::vector<T> type; }; Deseo escribir un mapa de función de orden superior que pueda …


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.