आप इन पंक्तियों के साथ कुछ कर सकते हैं।
#include <type_traits>
template<typename T, template<typename> class TT>
struct is_instantiation_of : std::false_type { };
template<typename T, template<typename> class TT>
struct is_instantiation_of<TT<T>, TT> : std::true_type { };
इसका इस्तेमाल अपने कार्यक्रम में इस प्रकार है::
template<typename T>
struct foo {};
template<typename FooType>
struct bar {
static_assert(is_instantiation_of<FooType, foo>::value, "failure");
};
int main()
{
bar<int> b; // ERROR!
bar<foo<int>> b; // OK!
}
आप चाहते हैं, तो आप इस सामान्यीकरण कर सकता था कि पता लगाने के लिए एक विशेषता एक वर्ग एक वर्ग टेम्पलेट का एक इन्स्टेन्शियशन है कि क्या सत्यापित कर सकते हैं कि यह देखते हुए एक वर्ग है, (प्रकार) मानकों के किसी भी संख्या के साथ एक टेम्पलेट का एक उदाहरण है इसलिए की तरह:
#include <type_traits>
template<template<typename...> class TT, typename T>
struct is_instantiation_of : std::false_type { };
template<template<typename...> class TT, typename... Ts>
struct is_instantiation_of<TT, TT<Ts...>> : std::true_type { };
template<typename FooType>
struct bar {
static_assert(is_instantiation_of<foo, FooType>::value, "failure");
};
फिर आप इसे अपने कार्यक्रम में इस तरह का प्रयोग करेंगे:
+०१२३५१६४१०६१
template<typename FooType>
struct bar {
static_assert(is_instantiation_of<foo, FooType>::value, "failure");
};
int main()
{
bar<int> b; // ERROR!
bar<foo<int>> b; // OK!
}
यहां live example है।
स्रोत
2013-06-30 13:10:43
इससे संबंधित एक सवाल पाया जा सकता है [यहां] (http: // stackoverflow।कॉम/प्रश्न/12 9 1 9 310/सी-डिटेक्ट-टेम्पलेटेड-क्लास/12 9 1 9 3 9 6) –