Tengo alguna clase C
y quiero pasar la dirección de su instancia y método a algún functor en una función de prueba Test_C_Foo1()
. Functor es una clase de plantilla y tengo que proporcionar el tipo del método de clase (MEMFN1
) como uno de sus parámetros de plantilla. Tengo que definir MEMFN1
escriba en algún lugar pero no quiero cambiar C.h
y no quiero contaminar el espacio de nombres global con él. Decidí localizar typedef tanto como sea posible, así que colóquelo dentro de una función de prueba, dentro del alcance donde realmente se usa MEMFN1
. ¿Es bueno usar un typedef dentro del cuerpo de la función?¿El typedef dentro de un cuerpo de función es una mala práctica de programación?
estándar permite el uso de typedef el interior de un cuerpo de la función, la restricción de que sólo en estos casos particulares:
El especificador typedef no se puede combinar en una decl-especificador-ss con cualquier otro tipo de especificador, excepto un especificador de tipo, y no deberá utilizarse en el especificador-declinal-seq de una declaración de parámetro (8.3.5) ni en el especificador de declinación-seq de una definición de función (8.4).
He aquí el fragmento de código:
C.h:
...
#include <string>
...
class C
{
public:
int foo1(const std::string&);
};
main.cpp:
...
#include "C.h"
...
void Test_C_Foo1()
{
typedef int(C::*MEMFN1)(const std::string&);
C c;
Functor1<C, MEMFN1,...> f1(&c, &C1::foo1,...);
...
}
...
int main()
{
Test_C_Foo1();
return 0;
}
Es muy bien. – Mat
Chicos, gracias por sus respuestas. Reducir el alcance de * typedef * en este caso me pareció una elección natural y tenía dudas solo porque no podía recordar si alguna vez lo había encontrado en el código o la literatura. –
¿Podría usar 'decltype' con C++ 11? –