Sınıf B'nin std :: vektöründen türetilmiş olup olmadığı nasıl derlenir?B sınıfının şablon ailesinden türetilmiş olup olmadığını sınama
template<class A>
struct is_derived_from_vector {
static const bool value = ????;
};
Sınıf B'nin şablon ailesinden türetilmiş olup olmadığını derleme zamanında nasıl test edilir?
template<class A, template<class> class Family>
struct is_derived_from_template {
static const bool value = ????;
};
kullanma:
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
}
, bir C++ sadece 03 ya da C++ 11 çözüm iyidir gerekip gerekmediğini bunu açık hale getirmek için önemlidir (Ben her ne kadar emin C++ 11 burada yardımcı olabilir) . Ve akıllıca bir açıklama olarak, asla standart kaplardan miras kalmamanız gerektiğine göre, orijinal özellik basittir: 'false': P –
C++ 03. Msvc 2010 derleyicisini kullanıyorum. Bu nedenle ek olarak 'decltype' kullanmayı kabul ediyorum. std :: vector' örneğin ony’dır. C++ 03 çözümünü bilmiyorsanız, C++ 11 çözümü de kabul edilir. –