मैं एक वर्ग टेम्पलेट कैसे लिखूं जो केवल संख्यात्मक प्रकारों को स्वीकार करता है (int
, double
, float
, आदि) टेम्पलेट के रूप में?संख्यात्मक प्रकारों के लिए कक्षा टेम्पलेट
उत्तर
आप std::is_arithmetic
टाइप विशेषता का उपयोग कर सकते हैं। आप केवल इस तरह के एक प्रकार के साथ एक वर्ग के इन्स्टेन्शियशन सक्षम करना चाहते हैं, std::enable_if
साथ संयोजन के रूप में इसका इस्तेमाल करते हैं: उपयोग करने के लिए आसान है कि enable_if
का एक संस्करण है, और disable_if
के एक मुक्त इसके लिए
#include <type_traits>
template<
typename T, //real type
typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type
> struct S{};
int main() {
S<int> s; //compiles
S<char*> s; //doesn't compile
}
, मैं अत्यधिक पढ़ने की सलाह देते हैं इस मामले पर this wonderful article (या cached version)।
आप 'टाइपनाम डमी =' को छोड़ सकते हैं। इसके अलावा मैं अत्यधिक [व्हील] (https://bitbucket.org/martinhofernandes/wheels) का उपयोग करने की सलाह देता हूं, यह कोड को काफी सरल बनाता है: 'टेम्पलेट <टाइपनाम टी, पहियों: सक्षम करें अगर
@ KonradRudolph, तुम सही हो, धन्यवाद। और मैं आगे पढ़ने के लिए अपने 'enable_if' पोस्ट में एक लिंक जोड़ूंगा। – chris
@ कोनराड रुडॉल्फ, 'डमी' को हटाने से यह संकलित नहीं हुआ है, लेकिन मुझे इसके साथ बहुत अनुभवी नहीं है, इसलिए मैं यह नहीं कह सकता कि इसके अलावा, यह कैसे होना चाहिए। मुझे एहसास हुआ कि मैं व्यर्थ नाम को हटा सकता हूं, हालांकि। – chris
मैं template<typename T, typename = ...>
दृष्टिकोण अत्यधिक गुप्त (वी.एस. 2015) से प्राप्त त्रुटि संदेश मिल गया, लेकिन पाया गया कि एक ही प्रकार विशेषता के साथ एक static_assert
भी काम करता है और मुझे एक त्रुटि संदेश निर्दिष्ट कर सकते हैं:
#include <type_traits>
template <typename NumericType>
struct S
{
static_assert(std::is_arithmetic<NumericType>::value, "NumericType must be numeric");
};
template <typename NumericType>
NumericType add_one(NumericType n)
{
static_assert(std::is_arithmetic<NumericType>::value, "NumericType must be numeric");
return n + 1;
}
int main()
{
S<int> i;
S<char*> s; //doesn't compile
add_one(1.f);
add_one("hi there"); //doesn't compile
}
निश्चित रूप से। यह संदेश यहां जोड़ना अच्छा लगेगा। – kyb
- 1. संख्यात्मक प्रकारों से मेल खाने के लिए सामान्य बाधा
- 2. कक्षा प्रकारों का शब्दकोश
- 3. गैर-संख्यात्मक प्रकारों पर प्रतीकात्मक हेरफेर
- 4. सभी व्युत्पन्न प्रकारों के लिए आंशिक रूप से कक्षा टेम्पलेट का विशेषज्ञ कैसे करें?
- 5. टेम्पलेट कक्षा
- 6. अज्ञात टेम्पलेट प्रकारों के साथ भ्रमित वाक्यविन्यास?
- 7. मूल्य प्रकारों के लिए एएसपी.नेट एमवीसी 2 संपादक टेम्पलेट, int
- 8. टेम्पलेट सदस्य चर के साथ सी ++ कक्षा
- 9. संख्यात्मक प्रकारों के बीच अंकगणित की अनुमति देने के लिए निहित रूपांतरण कैसे सेट करें?
- 10. कक्षा टेम्पलेट तत्काल
- 11. एकाधिक विरासत टेम्पलेट कक्षा
- 12. टेम्पलेट तर्क प्रकारों से कम करने वाले फ़ंक्शन टेम्पलेट पैरामीटर
- 13. विभिन्न टेम्पलेट प्रकारों को एक वेक्टर
- 14. साझा कार्यक्षमता के साथ कक्षा टेम्पलेट विशेषज्ञताओं
- 15. कक्षा निकाय के बाहर टेम्पलेट परिभाषा
- 16. संख्यात्मक() संख्यात्मक मानों की जांच करने के लिए
- 17. मैं सभी संख्यात्मक प्रकारों के लिए क्लास जेनेरिक कैसे बना सकता हूं?
- 18. विभिन्न संख्यात्मक प्रकारों की सूची स्वीकार करने वाले कार्यों को परिभाषित करने के लिए स्कैला तरीका
- 19. ग्रहण सीडीटी "नई कक्षा" टेम्पलेट
- 20. कक्षा टेम्पलेट में कोई कटौती
- 21. अस्तित्व के प्रकारों के लिए Idiomatic प्रतिस्थापन
- 22. सी ++ - टेम्पलेट कक्षा में टेम्पलेट समारोह के लिए अलग घोषणा/परिभाषा
- 23. अज्ञात प्रकारों के लिए IQueryable
- 24. कक्षा सूची के लिए कक्षा संरचना कक्षा?
- 25. जावस्सिस्ट के साथ आदिम प्रकारों की कक्षा कैसे प्राप्त करें?
- 26. कंक्रीट प्रकारों को मैप करने के लिए ऑटोमैपर कॉन्फ़िगर करें लेकिन मेरी कक्षा
- 27. आर: संख्यात्मक बनाम संख्यात्मक
- 28. जेनेरिक/टेम्पलेट प्रोग्रामिंग सर्वोत्तम प्रथाओं: प्रकारों को सीमित करने के लिए, या
- 29. स्कैला के न्यूमेरिक प्रकारों के साथ तुलना?
- 30. बैश, emacs बाइंडिंग के लिए संख्यात्मक उपसर्ग?
@KonradRudolph Do आप शीर्षक को भी ठीक करना चाहते हैं? मैं उलझन में हूं अगर ओपी वास्तव में प्रकार का मतलब है या वास्तव में उन प्रकार के स्थिरांक का मतलब है। – pmr
@pmr मैंने नहीं किया (लेकिन अब मैंने किया), अच्छी पकड़। मुझे पूरा यकीन है कि ओपी का मतलब है, यदि किसी अन्य कारण के लिए कि आप गैर-अभिन्न प्रकारों का उपयोग गैर-प्रकार के टेम्पलेट्स के रूप में नहीं कर सकते हैं, और यह कि गैर-प्रकार के टेम्पलेट्स के बारे में बात करते समय प्रश्न शुरू करने का कोई अर्थ नहीं है। –
@ कोनराड रुडॉल्फ हाँ, मेरा मतलब है प्रकार। – djWann