निम्नलिखित कोड पर विचार करेंसंकलन समय में सदस्य को सूचक को कैसे सहेजना है?
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
};
देखो, यह करता है, तो इस पैरामीटर एक typename या एक पूर्णांक मान है किसी भी टेम्पलेट पैरामीटर को बचाने के लिए संभव है। बात यह है कि सदस्य के लिए सूचक एक ऑफ़सेट है, यानी पूर्णांक। अब मैं संकलन समय में सदस्य के लिए किसी भी सूचक सहेजना चाहते:
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));
}
कैसे में सदस्य के लिए सूचक को बचाने के लिए समय संकलन? मैं वीएस -2008 का उपयोग करता हूं।
नोट। संकलन समय महत्वपूर्ण है। कृपया रन-टाइम समाधान न लिखें। मुझे यह पता है।
हा-हा, मुझे लगता है Moonshadow नया आज कुछ सीखा ... –
@Jon: मेरे Stroustrup संदर्भ में सदस्यों को प्वाइंटर: वास्तव में, बस chapeter की खोज की 15.5। * भेड़िये * – moonshadow
मैंने अभी उस खंड से एक वाक्य में टाइप किया था जब मुझे एहसास हुआ कि आपने अपना जवाब हटा दिया है। मुझे लगता है कि उनका नाम भ्रमित है हालांकि - वे वास्तव में पॉइंटर्स की तरह कुछ भी नहीं हैं। –