के टेम्पलेट परिवार से प्राप्त किया गया है या नहीं, यह जांचने के लिए कि कक्षा बी को std :: vector से प्राप्त किया गया है या नहीं?कक्षा बी को कक्षा
template<class A>
struct is_derived_from_vector {
static const bool value = ????;
};
कक्षा बी टेम्पलेट परिवार से प्राप्त किया गया है या नहीं, संकलित समय पर परीक्षण कैसे करें?
template<class A, template<class> class Family>
struct is_derived_from_template {
static const bool value = ????;
};
का उपयोग करना:
template<class T> struct X {};
struct A : X<int> {}
struct B : std::vector<char> {}
struct D : X<D> {}
int main() {
std::cout << is_derived_from_template<A, X>::value << std::endl; // true
std::cout << is_derived_from_template<D, X>::value << std::endl; // true
std::cout << is_derived_from_vector<A>::value << std::endl; // false
std::cout << is_derived_from_vector<B>::value << std::endl; // true
}
, यह स्पष्ट करने के लिए है कि क्या आप केवल एक सी ++ 03 या एक सी ++ 11 समाधान अच्छा है की जरूरत है महत्वपूर्ण है (हालांकि मैं कर रहा हूँ नहीं लगता है कि सी ++ 11 यहाँ मदद कर सकते हैं) । और एक स्मार्ट टिप्पणी के रूप में, यह देखते हुए कि आपको कभी भी मानक कंटेनरों से उत्तराधिकारी नहीं होना चाहिए, मूल विशेषता सरल है: 'झूठी': पी –
सी ++ 03। मैं msvc 2010 कंपाइलर का उपयोग करता हूं। इसलिए मैं इसके अलावा 'decltype' का उपयोग करने के लिए सहमत हूं। 'std :: vector' उदाहरण के लिए है। यदि आप सी ++ 03 समाधान नहीं जानते हैं तो सी ++ 11 समाधान भी आपका स्वागत है। –