से गैर विशिष्ट टेम्पलेट क्लास फ़ंक्शन को कॉल करें क्या एक विशेष टेम्पलेट क्लास से गैर-विशिष्ट टेम्पलेट क्लास में परिभाषित फ़ंक्शन को कॉल करना संभव है? यहां एक उदाहरण दिया गया है कि मैं क्या प्रयास कर रहा हूं:विशिष्ट टेम्पलेट वर्ग फ़ंक्शन
template <typename T>
struct Convert
{
static inline void toString(unsigned num, unsigned places, std::string& str) { ... }
};
template <>
struct Convert<int8_t>
{
static inline void toString(unsigned num, std::string& str)
{
Convert<int8_t>::toString(num, digitis(num), str);
}
};
जीसीसी शिकायत करता है कि यह गैर-विशिष्ट वर्ग समारोह नहीं देख सकता है; यानी मुझे लगता है कि यह केवल विशेष वर्ग के भीतर दिखता है।
किसी भी विचार?
संपादित
यहाँ मेरी कोड से एक और अधिक ठोस उदाहरण (एक संभव समाधान के साथ):
struct NonSpecial { };
template <typename T>
class Convert
{
template <typename R>
static inline R fromString(const register char *str, const unsigned str_len)
{
R result = 0;
//convert str to R
return result;
}
friend class Convert<int8_t>;
friend class Convert<uint8_t>;
}
template <>
struct Convert<int8_t>
{
static inline int8_t fromString(const register char* str, const unsigned str_len = 4)
{
Convert<NonSpecial>::fromString<int8_t>(str, str_len);
}
};
template <>
struct Convert<uint8_t>
{
static inline uint8_t fromString(const register char* str, const unsigned str_len = 3)
{
Convert<NonSpecial>::fromString<uint8_t>(str, str_len);
}
};
मैं अन्य कार्यों है - toString(), countDigits(), आदि मैं इस दृष्टिकोण को चुना है ताकि मैं प्रत्येक प्रकार के लिए समान फ़ंक्शन नाम रख सकूं (यानी ToStringU32(), toString32, आदि की आवश्यकता नहीं है)। मैंने टेम्पलेट विशेषज्ञता पर विचार किया लेकिन मुझे विश्वास नहीं है कि यह संभव है।
तुम क्यों समारोह के विशेष संस्करण से गैर विशेष संस्करण कॉल करने के लिए कोशिश कर रहे हैं? दूसरे शब्दों में, यदि आप जो भी कर रहे हैं वह गैर-विशिष्ट संस्करण को कॉल कर रहा है, तो आपको इसे विशिष्ट होने की आवश्यकता क्यों है? –
प्रकार 'टी' का स्थिर तरीका पर कोई असर नहीं है - यह पहले स्थान पर क्यों है? यह टेम्पलेट दुरुपयोग के मामले की तरह दिखता है, आप बस मुफ्त कार्यों को अधिभारित क्यों नहीं करते हैं? – Nim
अधिक ठोस उदाहरण के साथ अद्यतन पोस्ट। – Graeme