Xét đoạn mã sauLàm thế nào để lưu con trỏ vào thành viên trong thời gian biên dịch?
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
};
Look, nó có thể lưu bất kỳ mẫu tham số nếu tham số này là một typename hoặc một giá trị số nguyên. Vấn đề là con trỏ đến thành viên là một số nguyên, tức là số nguyên. Bây giờ tôi muốn lưu lại bất kỳ con trỏ cho thành viên trong thời gian biên dịch:
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));
}
Làm thế nào để tiết kiệm con trỏ tới thành viên trong thời gian biên dịch? Tôi sử dụng VS2008.
Lưu ý. Thời gian biên dịch là rất quan trọng. Vui lòng không viết giải pháp thời gian chạy. Tôi biết điều đó.
ha-ha, tôi đoán moonshadow học được cái gì mới hôm nay ... –
@ Jon: thật vậy, chỉ cần phát hiện chapeter 15,5: Con trỏ tới thành viên trong tài liệu tham khảo Stroustrup của tôi. * bẽn lẽn * – moonshadow
tôi vừa gõ một câu từ chính xác phần đó khi tôi nhận ra bạn đã xóa câu trả lời của bạn. Tôi nghĩ rằng tên của họ là khó hiểu mặc dù - họ không thực sự bất cứ điều gì giống như con trỏ. –