Articles of plantillas

SFINAE funciona de manera diferente en los casos de tipo y parámetros de plantilla sin tipo

Por qué funciona este código: template< typename T, std::enable_if_t<std::is_same::value, T>* = nullptr> void Add(T) {} template< typename T, std::enable_if_t<!std::is_same::value, T>* = nullptr> void Add(T) {} y puede distinguir correctamente entre estas dos llamadas: Add(1); Add(1.0); mientras que el siguiente código, si se comstack, ¿da como resultado la redefinición del error Add () ? template< typename […]

Obtener índice del tipo de elemento de una tupla?

Si tengo una tupla con diferentes tipos de elementos como std::tuple ¿Y cómo obtener el índice de un tipo de elemento? template struct Index { enum {value = ?;} }; Gracias.

¿Cómo implemento macro (o plantilla) no operativa en C ++?

¿Cómo implemento una macro no operativa en C ++? #include #ifdef NOOP #define conditional_noop(x) what goes here? #else #define conditional_noop(x) std::cout << (x) #endif int main() { conditional_noop(123); } Quiero que esto no haga nada cuando se define NOOP e imprime “123”, cuando NOOP no está definido.

Operador de sobrecarga << para una clase de plantilla

Estoy tratando de implementar un método para un árbol binario que devuelve una secuencia. Quiero usar la secuencia devuelta en un método para mostrar el árbol en la pantalla o para guardar el árbol en un archivo: Estos dos métodos están en la clase del árbol binario: Declaraciones: void streamIND(ostream&,const BinaryTree*); friend ostream& operator<<(ostream&,const BinaryTree&); […]

Cómo pasar una función de plantilla en una lista de argumentos de plantilla

Supongamos que tengo una función de template : template T produce_5_function() { return T(5); } ¿Cómo puedo pasar esta template completa a otra template ? Si produce_5_function fue un funtor, no habría problema: template struct produce_5_functor { T operator()() const { return T(5); } }; template<templateclass F> struct client_template { int operator()() const { return […]

Deducir el primer argumento de plantilla con otros parámetros de plantilla predeterminados

Gcc y clang parecen estar en desacuerdo sobre si este código debe comstackrse o no: #include template struct MyDelegate { }; template struct signature_traits; template <template class Delegate, typename Signature> struct signature_traits<Delegate> { using type = Signature; }; static_assert(std::is_same_v< void(int, int), signature_traits<MyDelegate>::type >); Vea la salida de godbolt aquí y pruébelo . Estoy a favor […]

¿Cómo asegurar que el parámetro de plantilla sea un subtipo del tipo deseado?

Tengo una clase de plantilla, lo que quiero hacer es lo siguiente Asegúrese de que un objeto se crea una instancia solo si el parámetro de plantilla pasado es un subtipo del tipo deseado Comunica al usuario del código por adelantado qué es lo que el parámetro de la plantilla debe satisfacer (1) es una […]

Cálculo e impresión factorial en tiempo de comstackción en C ++

template struct Factorial { enum { value = n * Factorial::value}; }; template struct Factorial { enum {value = 1}; }; int main() { std::cout << Factorial::value; std::cout << Factorial::value; } el progtwig anterior calcula el valor factorial durante el tiempo de comstackción. Quiero imprimir valor factorial en tiempo de comstackción en lugar de en […]

¿Cómo detectar la existencia de una clase usando SFINAE?

¿Es posible detectar si existe una clase en C ++ con SFINAE ? Si es posible, ¿cómo? Supongamos que tenemos una clase proporcionada solo por algunas versiones de una biblioteca. Me gustaría saber si es posible usar SFINAE para detectar si la clase existe o no. El resultado de la detección es arbitrario, digamos una […]

¿Cómo inicializar correctamente la variable miembro del tipo de plantilla?

sugiero que tengo una función de plantilla como la siguiente: template void doSomething() { T a; // a is correctly initialized if T is a class with a default constructor … }; Pero la variable a deja sin inicializar, si T es un tipo primitivo. Puedo escribir T a (0), pero esto no funciona si […]