Hãy xem xét mã sau:Tôi không thể truy cập vào con trỏ tới thành viên. Tại sao?
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
Tại sao trình biên dịch tạo lỗi? (VS2008)
New
Tôi đã gửi lỗi này để connect.microsoft.com.
trình biên dịch gì bạn đang sử dụng? Không có lỗi nào với g ++ 4.3.3. – sth
Lỗi được trình biên dịch trả về là gì? – luc
Tôi không thể hiểu bản khai của mẫu "Y". Thông số mẫu là một trong hai loại hoặc giá trị tích phân. "TF :: * m" không phải là một loại, mà bạn có thể parametrize mẫu của bạn ... Khi bạn viết "Y", tham số cuối cùng không phải là một loại và không một giá trị tích phân. Nó là một con trỏ tới thành viên. Vì vậy, tôi tin rằng, nó phải bị từ chối ... –
SadSido