"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ## ¿Se pueden obtener punteros de funciones para los operadores integrados de C++?

## ¿Se pueden obtener punteros de funciones para los operadores integrados de C++?

Publicado el 2024-11-08
Navegar:903

## Can You Get Function Pointers for Built-in C   Operators?

¿Es posible obtener el puntero de función de un operador estándar integrado?

Introducción

Los punteros de función proporcionan una manera de hacer referencia a funciones específicas funciones del operador. Sin embargo, para los operadores estándar integrados, este enfoque puede no ser sencillo. Este artículo profundiza en las razones detrás de esta limitación y explora soluciones alternativas para lograr una funcionalidad similar.

Por qué los punteros de función no están disponibles para los operadores integrados

Según el estándar C (13.6/ 1), los operadores integrados no son funciones de operador normales y, por lo tanto, no pueden tener punteros de función que apunten a ellos. Únicamente participan en la resolución de sobrecargas sin cumplir ningún otro propósito.

Alternativa: uso de objetos de función

Para superar esta limitación, el estándar C introduce objetos de función, que proporcionan una funcionalidad análoga a la integrada operadores a través de objetos con plantilla. Por ejemplo, para comparaciones, se definen objetos de función como igual_a, mayor y menos_igual. Estos objetos se pueden utilizar como argumentos de puntero de función.

Ejemplo

En el fragmento de código proporcionado, el objetivo es comparar dos números enteros dentro de una clase de plantilla. Usando la técnica de objetos de función, se puede lograr de la siguiente manera:

class MyAction {
  bool operator()() {
    if (fnCompare_(arg0_, arg1_)) {
      // do this
    } else {
      // do s.th. else
    }
  }
};

Aquí, fnCompare_ puede ser un objeto de función como std::equal_to para realizar la comparación.

Operadores de tipo de clase estándar

Además de los objetos de función , los operadores de biblioteca estándar también se pueden utilizar como punteros de función. Sin embargo, se debe hacer referencia a la instancia respectiva de la plantilla. Por ejemplo:

std::basic_string a("test"), b("test2");
std::cout >(a, b, &std::operator );

Conclusión

Si bien los punteros de función no están disponibles directamente para las funciones integradas, En los operadores estándar, las soluciones alternativas proporcionadas por los objetos de función y los operadores de tipo de clase estándar permiten una funcionalidad equivalente. Estas alternativas permiten el uso de operadores estándar específicos como punteros de función, abordando la limitación que presentan los operadores integrados.

Último tutorial Más>

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