Derleyicilerin std::type_info
işlevlerinin davranışlarını uygulamada daha fazla özgürlüğü olduğunu biliyorum.C++: türlerini ayırt etmek için type_info
Ben nesne türlerini karşılaştırmak için kullanıyorum düşünüyorum, bu yüzden emin olmak istiyorum:
std::type_info::name
iki farklı türleri için iki farklı dizeleri geri dönmelidir.std::type_info::before
Type1
önce olduğunuType2
Type2
özel veya daha önceType1
olduğunu söylemek gerekir. Aynı şablon sınıfının// like this: typeid(T1).before(typeid(T2)) != typeid(T2).before(typeid(T1))
İki farklı uzmanlık farklı türleri olarak kabul edilir. Aynı türdeki iki farklı
typedef
-inandı aynı türdür.
Ve nihayet: (a std::map
örn) std::type_info
yana
yere
type_info
s saklamak nasıl, copyable değil mi?std::type_info
'a sahip olmanın tek yolu her zaman bir yere (örneğin: yığında veya statik/global değişkende) ayrılmış ve ona bir işaretçi kullanmış mıdır?Ne kadar hızlı
operator==
,operator!=
ve en yaygın derleyicilerdebefore
nelerdir? Sanırım sadece bir değeri karşılaştırmalılar. Ve ne kadar hızlıtypeid
?virtual bool operator==(const A&) const
numaralı birA
sınıfım var. Bu tür uygulamak için kabul edilebilir (ve standart) yolu muvirtual bool operator==(const A &other) const { if(typeid(*this) != typeid(other)) return false; // bool B::operator==(const B &other) const // is defined for any class B return operator==(static_cast<B&>(other)); }
:
A
yana birçok alt sınıfları var (ki bazıları derleme zamanında bilinmeyen), herhangi bir alt sınıftaB
bu şekilde bu sanal operatörünü aşırı ediyorum Şebeke?
Bölüm 2 ile ilgili not: kesinlikle typeid (Type1) == typeid (Type2) değilse, diğer bir deyişle bunlar farklı türde değil ;-) –