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.
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.
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.
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
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 );
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.
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