Considere el siguiente código¿Cómo guardar el puntero al miembro en tiempo de compilación?
template<typename T, int N>
struct A {
typedef T value_type; // OK. save T to value_type
static const int size = N; // OK. save N to size
};
Mira, es posible guardar cualquier parámetro de plantilla si este parámetro es un nombre de tipo o un valor entero. El problema es que puntero al miembro es un desplazamiento, es decir, entero. Ahora quiero guardar cualquier puntero a miembro en tiempo de compilación:
struct Foo {
int m;
int r;
};
template<int Foo::*ptr_to_member>
struct B {
// Next statement DOES NOT WORK!
static int Foo::* const saved_ptr_to_member = ptr_to_member;
};
// Example of using
int main() {
typedef B<&Foo::m> Bm;
typedef B<&Foo::r> Br;
Foo foo;
std::cout << (foo.*(Bm::saved_ptr_to_member));
}
cómo guardar puntero a miembro en tiempo de compilación ? Yo uso VS2008.
Nota. El tiempo de compilación es crítico. Por favor, no escriba solución en tiempo de ejecución. Lo sé.
ja-ja, supongo Moonshadow aprendido algo nuevo hoy ... –
@ Jon: de hecho, acaba de descubrir chapeter 15.5: Los punteros a los miembros de mi referencia BS. * tímido * – moonshadow
acababa de escribir una oración exactamente de esa sección cuando me di cuenta de que había borrado su respuesta. Aunque creo que su nombre es confuso, en realidad no son nada como punteros. –