Я не могу получить доступ к указателю на член. Зачем? - PullRequest
8 голосов
/ 26 ноября 2009

Рассмотрим следующий код:

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

Почему компилятор генерирует ошибку? (VS2008)


New

Я отправил эту ошибку на connect.microsoft.com .

Ответы [ 3 ]

7 голосов
/ 26 ноября 2009

Я думаю, что это как-то связано с тем, что Visual C ++ не знает размер указателя на член в этой точке. Проверьте этот отчет о дефектах, например ( здесь - другая проблема с указателем на переменную-член). Я думаю, что вы нашли еще одну ошибку Visual C ++, и о ней следует сообщить на connect.microsoft.com.

1 голос
/ 01 декабря 2009
0 голосов
/ 26 ноября 2009

Я наткнулся на ту же проблему. Поддержка аргументов шаблона указателя на член все еще ограничена в VC ++ (см. отчет об ошибке ).

В моем случае я мог бы обойти это, используя функцию шаблона i.s.o. класс шаблона:

template< typename Class > struct CMemberDumper {
    Class& object;
    template< typename M > void visit_member( M C::*pm ) {
       std::cout << object.*pm;
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...