Preguntas etiquetadas con sfinae

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 …

28
¿Cómo puedo agregar reflejo a una aplicación C ++?
Me gustaría poder introspectar una clase de C ++ para su nombre, contenido (es decir, miembros y sus tipos), etc. Estoy hablando de C ++ nativo aquí, no C ++ administrado, que tiene reflexión. Me doy cuenta de que C ++ proporciona información limitada usando RTTI. ¿Qué bibliotecas adicionales (u …


2
¿Cómo funciona `void_t`
Vi la charla de Walter Brown en Cppcon14 sobre la programación de plantillas modernas ( Parte I , Parte II ) donde presentó su void_ttécnica SFINAE. Ejemplo: Dada una plantilla variable simple que evalúa voidsi todos los argumentos de la plantilla están bien formados: template< class ... > using void_t …
149 c++  templates  c++14  sfinae 



2
¿Cómo se implementa std :: is_function?
¿Cómo es la siguiente implementación std::is_function? template<class T> struct is_function : std::integral_constant< bool, !std::is_const<const T>::value && !std::is_reference<T>::value > {}; (de la referencia de CPP ) Me parece que una intsería una función bajo esta definición. ¿Qué me estoy perdiendo?
82 c++  templates  std  sfinae 

2
Enfoques para funcionar SFINAE en C ++
Estoy usando la función SFINAE en gran medida en un proyecto y no estoy seguro de si hay alguna diferencia entre los siguientes dos enfoques (aparte del estilo): #include <cstdlib> #include <type_traits> #include <iostream> template <class T, class = std::enable_if_t<std::is_same_v<T, int>>> void foo() { std::cout << "method 1" << std::endl; …
40 c++  sfinae 

2
¿Por qué una especialización de plantilla de clase parcial en una clase de plantilla coincidente es ambigua con otra especialización parcial sin la coincidencia de plantilla?
La pregunta puede ser demasiado difícil de describir en una oración del título, pero aquí hay un ejemplo mínimo: #include <iostream> #include <type_traits> template <class T, class U, class Enabler> struct my_trait : std::false_type {}; template <class T, class U> struct my_trait<T, U, std::enable_if_t<std::is_same<T, U>::value>> : std::true_type {}; template <class …
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.