Articles of sfinae

¿SFINAE puede detectar violaciones de acceso privado?

Me pregunto si si pruebo a algún miembro de una clase y el miembro es privado, ¿qué responderá sfinae? ¿Se equivocará o dirá que está bien o se equivocará de la misma manera?

Especialización de plantillas y problemas de enable_if

Me encuentro con un problema relacionado con el uso apropiado de enable_if y la especialización de plantillas. Después de modificar el ejemplo (por razones de confidencialidad), aquí hay un ejemplo comparable: Tengo una función llamada “menos” que comprueba si 1st arg es menor que 2nd arg. Digamos que quiero tener 2 tipos diferentes de implementaciones […]

Usando SFINAE para verificar operador global <<?

Quiero tener varias to_string() globales sobrecargadas to_string() que toman algún tipo T y lo convierten en su representación de cadena. Para el caso general, quiero poder escribir: template inline typename enable_if<!std::is_pointer::value && has_insertion_operator::value, void>::type to_string( T const &t, OutputStringType *out ) { std::ostringstream o; o << t; *out = o.str(); } Mi implementación de has_insertion_operator […]

¿Qué es decltype con dos argumentos?

Editar, para evitar confusiones: decltype no acepta dos argumentos. Ver respuestas. Las siguientes dos estructuras pueden usarse para verificar la existencia de una función miembro en un tipo T durante el tiempo de comstackción: // Non-templated helper struct: struct _test_has_foo { template static auto test(T* p) -> decltype(p->foo(), std::true_type()); template static auto test(…) -> std::false_type; […]

Explique C ++ SFINAE a un progtwigdor no C ++

¿Qué es SFINAE en C ++? ¿Puedes explicarlo en palabras comprensibles para un progtwigdor que no está versado en C ++? Además, ¿a qué concepto en un lenguaje como Python corresponde SFINAE?

Detectando constexpr con SFINAE

Estoy trabajando en la actualización de algunos códigos C ++ para aprovechar la nueva funcionalidad en C ++ 11. Tengo una clase de rasgo con algunas funciones que devuelven tipos fundamentales que la mayoría de las veces, pero no siempre, devuelve una expresión constante. Me gustaría hacer diferentes cosas dependiendo de si la función es […]

¿Por qué debería evitar std :: enable_if en las firmas de funciones?

Scott Meyers publicó el contenido y el estado de su próximo libro EC ++ 11. Escribió que un elemento en el libro podría ser “Avoid std::enable_if in function std::enable_if “ . std::enable_if se puede usar como un argumento de función, como un tipo de retorno o como una plantilla de clase o un parámetro de […]

C ++ SFINAE ejemplos?

Quiero entrar en más meta-progtwigción de plantillas. Sé que SFINAE significa “falla de sustitución no es un error”. ¿Pero alguien puede mostrarme un buen uso para SFINAE?

¿Cómo verificar si el operador == existe?

Intento crear un ejemplo que verifique la existencia del operator== (miembro o función no miembro). Comprobar si una clase tiene un operator== miembro operator== es fácil, pero ¿cómo verificar si tiene un operator== no miembro operator== ? Esto es lo que tengo que hacer ahora: #include struct A { int a; #if 0 bool operator==( […]

¿Qué es exactamente el “contexto inmediato” mencionado en el Estándar C ++ 11 para el cual se aplica SFINAE?

El párrafo 14.8.2 / 8 de la Norma C ++ 11 especifica las condiciones bajo las cuales una falla de sustitución debe o no dar como resultado un error de comstackción “dura” (causando por lo tanto la falla de la comstackción) o un error “suave” que simplemente hacer que el comstackdor descarte una plantilla de […]