Não consigo ter acesso ao ponteiro para o membro. Por quê?
-
05-07-2019 - |
Pergunta
Considere o seguinte código:
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
Por que o compilador gera erro? (Vs2008)
Novo
Eu postei este bug para Connect.microsoft.com.
Solução 2
Isto é um incomodar
Outras dicas
Eu acho que está relacionado de alguma forma com que o visual c ++ não sabe o tamanho do ponteiro para o membro nesse ponto. Verificar isto Relatório de defeito, por exemplo (aqui é outro problema com o ponteiro da variável de membro). Eu acho que você encontrou mais um bug visual em C ++ e deve ser relatado para conectar.microsoft.com.
Eu tropecei no mesmo problema. O suporte para argumentos de modelo ponteiro para membro ainda é limitado em VC ++ (ver relatório de erro).
No meu caso, eu poderia contorná -lo usando uma função de modelo ISO A Classe de modelo:
template< typename Class > struct CMemberDumper {
Class& object;
template< typename M > void visit_member( M C::*pm ) {
std::cout << object.*pm;
}
};
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow