ए typedef
मैक्रो नहीं है आपका दूसरा उदाहरण पहले के बराबर नहीं है। पहले मामले में आपका typedef
फ़ैक्टर को परिभाषित कर रहा है, फिर उस प्रकार का उपयोग फ़ैक्टर प्रकार के कास्ट ऑपरेटर में कर रहा है। दूसरे में ऑपरेटर खराब वाक्यविन्यास का उपयोग कर रहा है क्योंकि कोई ऑपरेटर निर्दिष्ट नहीं है क्योंकि कोई प्रकार नहीं है। मुझे यकीन नहीं है कि इसे कैसे लिखना है लेकिन आमतौर पर एक तरीका है।
टीपीपी में मानव पठनीय कोड बनाने के अलावा टाइपपीफ वास्तव में आवश्यक नहीं हैं और फिर भी यह इस बात पर निर्भर करता है कि आप किस तरह के मानव हैं।
चूंकि मैं वैकल्पिक वाक्यविन्यास के साथ नहीं आ सकता क्योंकि शायद कुछ मामलों में टाइपपीफ आवश्यक हैं। मैंने बस एक और संभवतः सोचा।
template <typename T>
struct WhateverHandler
{
typedef T rType;
static rType Whatever() { return rType(); }
};
template <>
struct WhateverHandler<std::string>
{
typedef std::string rType;
static rType Whatever() { return rType(); }
};
मैं इस मामले में लगता है कि यह भी आप अन्यथा के रूप में विशेषज्ञता की परवाह किए बिना स्थिर विधि कॉल करने में typedef की आवश्यकता होगी: आप जो नीचे की तरह एक वापसी प्रकार के साथ एक स्थिर विधि निहित विशेषज्ञता के साथ एक टेम्पलेट था कहो विधि संकलक को भ्रमित कर सकती है क्योंकि रिटर्न प्रकार अलग-अलग होंगे लेकिन यह उचित अधिभार नहीं होगा।
template <typename T>
struct WhateverUser
{
typename WhateverHandler<T>::rType DoWhatever()
{
return WhateverHandler<T>::template Whatever();
}
};
तुम क्यों घोषणा करेंगे टाइपपीफ के बिना काम? –
सुरक्षित बूल में रूपांतरण बिल्कुल जरूरी है? –
@ टैड: यह मेरे विशेष मामले में उपयोगी लगता है (एक 'वैकल्पिक' कक्षा टेम्पलेट)। –
fredoverflow