Bu, değişkeninizin typeidini biliyorsanız, C++ 'da typeid operatörünü kullanarak her zaman bildiğiniz gibi yapılabilir.
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid(pb).name() << endl; //prints "class Base *"
cout << typeid(*pb).name() << endl; //prints "class Derived"
cout << typeid(pd).name() << endl; //prints "class Derived *"
Sonra oluşturmak zorunda olan bir multimap
veya convertible type ids
(convertable tipi) olarak ve değer (dönüştürülebilir olup olmadığını bilmek istiyorum) typeid
olarak anahtarla Nerede olursa gibi. Burada bu durumda const type_info& from
numaralı key
const type_info& to
ile eşlenmiş olup olmadığını bulmak için haritaya ulaşabilirsiniz. Evet ise boole true
veya false
olarak dönebilirsiniz. Ancak bu durumda, tüm sınıfları ve kodda kalıtımı doğru şekilde gördüğünüzden emin olmalısınız. Ve temel olarak, yasal bir dönüşüm olup olmayacağına karar verir ve haritaya bu temelde ekler. Ama bu sıkıcı bir süreç olurdu ve bunun hiçbir kullanımını görmüyorum.
Genel anlamda C++, bir tür başka bir türe dönüştürülebilir veya düzgün bir şekilde yüklenemezse dynamic cast
aracılığıyla size bilgi verir. static_cast
, birbiriyle uyumsuz türler bile yayınlayacaktır ve bunun yanlış kullanımı, çalışma zamanı hatasına neden olur
Bunun mümkün olduğunu düşünmüyorum. Ama asıl soru, böyle bir işlevle ne yaparsınız? – Nawaz
Ayrıca, neden sadece 'type_info' var? – mfontanini
"Eğer A ve B tiplerini biliyorsanız, bu iyi çalışır".Tamam, ama nasıl oluyor da türleri bilmiyorsun? – jrok