Non riesco ad accedere al puntatore al membro. Perché?
-
05-07-2019 - |
Domanda
Considera il seguente codice:
template<class T, class F> struct X {};
template<class T, class F, T F::* m> struct Y {};
struct Foo {
int member;
typedef X<int, Foo> x_type; // works well
typedef Y<int, Foo, &Foo::member> y_type; // ERROR
};
typedef Y<int, Foo, &Foo::member> y_type2; // OK
Perché il compilatore genera errori? (VS2008)
Nuovo
Ho inviato questo errore a connect.microsoft.com .
Soluzione 2
Questo è un bug
Altri suggerimenti
Penso che sia in qualche modo correlato a quel Visual C ++ che non conosce la dimensione del puntatore al membro in quel punto. Controllare questo rapporto sui difetti, ad esempio ( qui è un altro problema con il puntatore alla variabile membro). Penso che tu abbia trovato un altro bug di Visual C ++ e dovrebbe essere segnalato a connect.microsoft.com.
Mi sono imbattuto nello stesso problema. Il supporto per gli argomenti del modello da puntatore a membro è ancora limitato in VC ++ (vedere report di bug ) .
Nel mio caso ho potuto aggirare il problema utilizzando una funzione modello i.s.o. una classe modello:
template< typename Class > struct CMemberDumper {
Class& object;
template< typename M > void visit_member( M C::*pm ) {
std::cout << object.*pm;
}
};