c++ - किसी वस्तु का अभिन्न होना या न होना एक वर्ग प्रकार है या नहीं यह जानने में क्या हर्ज है?




templates (2)

नमस्कार, मैंने Cppreference.com में इस तरह के कई उदाहरण देखे हैं:

std::is_class<T>
std::is_integral

और इसी तरह। मुझे पता है कि अगर मैं उदाहरण के लिए कोड चलाता हूं तो मुझे true या false । लेकिन इसमें क्या बात है? जैसे वस्तु को जानना वर्ग प्रकार का है या नहीं?

#include <iostream>
#include <type_traits>

struct A {};
class B {};
enum class C {};

int main()
{
    std::cout << std::boolalpha;
    std::cout << std::is_class<A>::value << '\n';
    std::cout << std::is_class<B>::value << '\n';
    std::cout << std::is_class<C>::value << '\n';
    std::cout << std::is_class<int>::value << '\n';
}

उत्पादन:

true
true
false
false
  • मैंने इस ( is_class , is_integral , is_arithmetic , ...) का उपयोग करके एक वास्तविक उदाहरण के लिए सभी खोज की है, लेकिन सभी ट्यूटोरियल केवल निराशाजनक उदाहरण दिखाते हैं: केवल true या false

  • किसी को भी इस टेम्पलेट का उपयोग कर एक छोटे उपयोगी उदाहरण के साथ मेरी मदद कर सकता है?


यह कंसोल के लिए लिखने के लिए नहीं है, यह सुनिश्चित करने के लिए है।

मोटे तौर पर आप पूछ रहे हैं: प्रकार के लक्षण क्या है?

इसका जवाब है टेम्पलेट मेटाप्रोग्रामिंग । उदाहरण के लिए, मैं एक टेम्पलेट विशेषज्ञता बना सकता हूं जो अभिन्न प्रकारों के लिए एक काम करता है, और दूसरा गैर-अभिन्न प्रकारों के लिए।

हारून बुलमैन का लक्षण टाइप करने के लिए एक सरल परिचय है , जैसा कि here जेसेक करता here

मेरी राय में, इन चीजों का अधिकांश उपयोग पृष्ठभूमि सुविधाओं के हिस्से के रूप में शांत सुविधाओं और वर्गों और उपयोगिताओं (यानी पुस्तकालयों में) के कार्यान्वयन के भीतर दफन पाया जाएगा, जो इसे सभी काम करता है।

आगे की पढाई:

  • C ++ प्रकार के लक्षण
  • लक्षण वर्ग कैसे काम करते हैं और वे क्या करते हैं?

राइटफॉल्ड का जवाब उस पहले पर जब लक्षण उपयोगी हैं, एक शानदार उदाहरण देता है:

उदाहरण के लिए, std::copy का उपयोग std::memcpy उपयोग आंतरिक रूप से एक स्पष्ट लूप के बजाय कर सकता है जब पुनरावृत्तियों PODs के संकेत होते हैं। यह SFINAE के साथ प्राप्त किया जा सकता है।


यह टेम्प्लेट मेटा प्रोग्रामिंग के लिए है। जब आपको पता नहीं होगा कि अंत-उपयोगकर्ता किस प्रकार (ओं) को टेम्पलेट में पारित करेगा। कभी-कभी यह त्रुटियों की रिपोर्ट करने के लिए होता है, कभी-कभी यह पारित किए गए प्रकारों पर विशेषज्ञ करने के लिए होता है। कभी-कभी यह एक संयोजन है।

Cppreference.com (उदाहरण https://en.cppreference.com/w/cpp/types/is_enum ) पर देखे गए उदाहरण बहुत अधिक सरलीकृत किए गए हैं और केवल यह दर्शाते हैं कि गैर-विशिष्ट तरीके से विशेषता का उपयोग कैसे करें। आप इन लक्षणों को लगभग सीधे एक साधारण (गैर-टेम्पलेट फ़ंक्शन या वर्ग) में उपयोग नहीं करेंगे।





templates