Si consideri il seguente codiceCome salvare il puntatore nel membro in fase di compilazione?
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
};
Guardate, è possibile salvare qualsiasi parametro di modello se questo parametro è un TypeName o un valore intero. Il fatto è che il puntatore per il membro è un offset, vale a dire un numero intero. Ora voglio salvare qualsiasi puntatore a membro in fase di compilazione:
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));
}
come salvare puntatore a membro a tempo di compilazione ? Io uso VS2008.
Nota. Il tempo di compilazione è fondamentale. Si prega di non scrivere la soluzione di run-time. Lo so.
ha-ha, credo Moonshadow imparato qualcosa di nuovo oggi ... –
@ Jon: infatti, appena scoperto chapeter 15.5: puntatori ai membri nel mio riferimento Stroustrup. * imbarazzato * – moonshadow
avevo appena scritto una frase da esattamente quella sezione quando ho capito che avevi cancellato la tua risposta. Penso che il loro nome sia confuso però - non sono in realtà niente di simile ai puntatori. –