Metaprogramación: criterios de selección de plantilla alternativa para la definición de función
Esta pregunta explora el concepto de definir una plantilla basada en la capacidad de un tipo para convertirse a una cuerda. El código original usa el rasgo de tipo is_arithmetic, pero la sugerencia es usar en su lugar un criterio que evalúe si to_string está definido para el tipo.
Sin embargo, lo opuesto a este criterio, determinar cuándo no está definido to_string, demuestra desafiante. El siguiente código falla:
templateenable_if_t Para abordar esto, la respuesta propone usar el rasgo de tipo void_t de Walter Brown, que permite la creación de lo siguiente:
template<typename T, typename = void> struct has_to_string : std::false_type { }; template<typename T> struct has_to_string<T, void_t<decltype(std::to_string(std::declval<T>()))> > : std::true_type { };Este rasgo de tipo evalúa efectivamente si to_string está definido para un tipo determinado, proporcionando así un criterio de selección de plantilla alternativo que se alinea con mayor precisión con la intención original.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3