C++ Academy · पाठ

कस्टम Traits लिखना

अपने type traits बनाएँ

पाठ 4, कुल 4 में से13 चरण

कस्टम Traits लिखना, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

अपने ट्रेट बनाना

जब मानक लाइब्रेरी में आपकी आवश्यक जाँच उपलब्ध न हो, तब आप एक कस्टम ट्रेट लिख सकते हैं। ट्रेट बस ऐसा टेम्पलेट है जो ::value या ::type उपलब्ध कराता है।

प्राथमिक टेम्पलेट + विशेषीकरण

मानक पैटर्न यह है: false पर डिफ़ॉल्ट होने वाला प्राथमिक टेम्पलेट, और उसके साथ ऐसा विशेषीकरण जो संबंधित प्रकार से मेल खाता हो और true निर्धारित करता हो।

#include <iostream>
#include <type_traits>

template <typename T>
struct is_ptr : std::false_type {};

template <typename T>
struct is_ptr<T*> : std::true_type {};

int main() {
    std::cout << is_ptr<int>::value << "\n";
    std::cout << is_ptr<int*>::value << "\n";
    return 0;
}

integral_constant से विरासत लेना

std::true_type या std::false_type से विरासत लेने पर आपके ट्रेट को अपने-आप एक value सदस्य मिल जाता है और वह मानक ट्रेट्स की तरह व्यवहार करता है।

कंटेनर पहचानने वाला ट्रेट

नेस्टेड सदस्यों की जाँच करके पता लगाएँ कि कोई प्रकार कंटेनर जैसा दिखता है या नहीं। यहाँ हम एक सहायक के माध्यम से value_type टाइपडेफ़ की मौजूदगी पर विशेषीकरण करते हैं।

#include <iostream>
#include <vector>
#include <type_traits>

template <typename T, typename = void>
struct has_value_type : std::false_type {};

template <typename T>
struct has_value_type<T, std::void_t<typename T::value_type>> : std::true_type {};

int main() {
    std::cout << has_value_type<std::vector<int>>::value << "\n";
    std::cout << has_value_type<int>::value << "\n";
    return 0;
}

std::void_t की व्याख्या

std::void_t<...> किसी भी मान्य प्रकार-सूची को void में बदलता है। यदि इसके अंदर का कोई प्रकार अमान्य हो, तो SFINAE के माध्यम से विशेषीकरण हटा दिया जाता है और प्राथमिक false_type प्रभावी होता है।

सदस्य फ़ंक्शन की पहचान

आप void_t में व्यंजक की जाँच करके पता लगा सकते हैं कि किसी प्रकार में कॉल किया जा सकने वाला size() है या नहीं।

#include <iostream>
#include <string>
#include <type_traits>

template <typename T, typename = void>
struct has_size : std::false_type {};

template <typename T>
struct has_size<T, std::void_t<decltype(std::declval<T>().size())>> : std::true_type {};

int main() {
    std::cout << has_size<std::string>::value << "\n";
    std::cout << has_size<int>::value << "\n";
    return 0;
}

declval

std::declval<T>() उन संदर्भों में T प्रकार का काल्पनिक मान बनाता है जिनका मूल्यांकन नहीं होता। इससे आप वस्तु बनाए बिना decltype व्यंजक लिख सकते हैं।

रूपांतरण ट्रेट

कस्टम ट्रेट प्रकार भी उत्पन्न कर सकते हैं। यह ट्रेट पॉइंटर की एक परत हटा देता है।

#include <iostream>
#include <type_traits>

template <typename T>
struct remove_one_pointer { using type = T; };

template <typename T>
struct remove_one_pointer<T*> { using type = T; };

int main() {
    using R = remove_one_pointer<int*>::type;
    std::cout << std::is_same_v<R, int> << "\n";
    return 0;
}

_v और _t सहायक देना

चर और उपनाम टेम्पलेट जोड़कर मानक शैली अपनाएँ।

#include <iostream>
#include <type_traits>

template <typename T>
struct is_char : std::false_type {};
template <>
struct is_char<char> : std::true_type {};

template <typename T>
inline constexpr bool is_char_v = is_char<T>::value;

int main() {
    std::cout << is_char_v<char> << "\n";
    std::cout << is_char_v<int> << "\n";
    return 0;
}

पहचान प्रतिमान

void_t तकनीक सामान्यीकृत होकर पहचान प्रतिमान बनती है, जिसे प्रायोगिक std::is_detected औपचारिक रूप देता है। C++20 के कॉन्सेप्ट्स इस पूरी प्रक्रिया को अधिक साफ़ बनाते हैं।

अपने ट्रेट का परीक्षण

कस्टम ट्रेट्स को static_assert से सत्यापित करें, ताकि कोई भी प्रतिगमन तुरंत बिल्ड विफल कर दे।

#include <type_traits>

template <typename T>
struct is_void_like : std::false_type {};
template <>
struct is_void_like<void> : std::true_type {};

static_assert(is_void_like<void>::value);
static_assert(!is_void_like<int>::value);

int main() { return 0; }

त्वरित जाँच

std::void_t की भूमिका को याद करें।

पुनरावलोकन

आपने कस्टम ट्रेट लिखना सीखा।

  • प्राथमिक टेम्पलेट का डिफ़ॉल्ट मान false होता है; विशेषीकरण true निर्धारित करता है
  • true_type/false_type से विरासत लें
  • void_t + declval पहचान प्रतिमान को सक्षम करते हैं
  • _v/_t सहायक जोड़ें और static_assert से परीक्षण करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “कस्टम Traits लिखना” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कस्टम Traits लिखना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कस्टम Traits लिखना” में मैं क्या सीखूँगा?

अपने type traits बनाएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“कस्टम Traits लिखना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. प्रकारों पर क्वेरी करना
  2. प्रकारों में रूपांतरण
  3. सशर्त तर्क
  4. कस्टम Traits लिखना
← C++ Academy पर वापस जाएँ