के बिना सदस्य फ़ंक्शन का रिटर्न प्रकार प्राप्त करें मेरे पास कई कक्षाएं हैं जिन्हें मैं संशोधित नहीं कर सकता। प्रत्येक में एक कॉपी कन्स्ट्रक्टर होता है, कम से कम एक अन्य कन्स्ट्रक्टर, और एक फ़ंक्शन foo()
जो कुछ मान देता है। मैं एक वर्ग टेम्पलेट बनाना चाहता हूं जो इन वर्गों में से प्रत्येक से प्राप्त हो सकता है, और इसमें डेटा सदस्य है जो foo()
के वापसी प्रकार के समान प्रकार है (क्षमा करें यदि मुझे कुछ शब्दावली गलत है)।ऑब्जेक्ट
दूसरे शब्दों में, मैं एक वर्ग टेम्पलेट
template<typename T> class C : public T
{
footype fooresult;
};
जहां footype
T::foo()
की वापसी प्रकार है चाहते हैं।
अगर आधार वर्ग सब था, कहते हैं, एक डिफ़ॉल्ट निर्माता, मैं कर सकता
decltype(T().foo()) fooresult;
(जीसीसी में C++ 0x कार्यक्षमता के साथ), लेकिन कक्षाएं आम में किसी विशेष निर्माता की जरूरत नहीं है , कॉपी कन्स्ट्रक्टर के अलावा।
जीसीसी decltype(this->foo())
की अनुमति नहीं देता है, हालांकि स्पष्ट रूप से यह संभावना है कि इसे सी ++ 0x मानक में जोड़ा जाएगा - क्या किसी को पता है कि यह कितना संभव है?
मुझे लगता है कि decltype(foo())
या decltype(T::foo())
के साथ कुछ करना संभव होना चाहिए लेकिन वे काम नहीं कर रहे हैं: जीसीसी फॉर्म cannot call member function 'int A::foo()' without object
के रूप में त्रुटि देता है।
बेशक, मेरे पास एक अतिरिक्त टेम्पलेट पैरामीटर footype
, या T
प्रकार का गैर-वर्ग पैरामीटर भी हो सकता है, लेकिन क्या इससे बचने का कोई तरीका है?
कोई शायद कुछ और सुरुचिपूर्ण के साथ आ जाएगा, लेकिन 'टाइपनाम डेमटाइप (mem_fun (& T :: foo())) :: result_type' या कुछ ऐसे के बारे में क्या? –
@ स्टेव: जहां यह नाम 'return_type' आया था? – Nawaz
@ नवाज: मेरी कल्पना। रीफ्रेश हिट करें ;-) –