Bağımsız değişken olarak boşluk işaretçisine sahip bir yöntem var. Yöntemin gövdesinde, sadece boşluk işaretçisinin belirli bir işaretçiye dönüştürülebiliyorsa çalıştırması gereken bir kod yazmak istiyorum (benim durumumda bu bir karttır *). Kartın kart işaretçisine dönüştürülebilir olup olmadığını nasıl kontrol edebilirim?Void işaretçisinin başka bir işaretçi türüne dönüştürülüp dönüştürülmeyeceğini nasıl kontrol edebilirim?
cevap
Bunu yapmak için C++ dili özelliği yoktur.
[Bunu yapma] Bir olası yaklaşım, void*
noktasını, tür bilgilerini ve başka bir void*
depolayan belirli bir bilinen türde bir sınıf yapmaktır. Ardından, ilk void*
türünü içeren veri türüne dönüştürebilir, türün istediğiniz gibi olup olmadığını belirleyebilir ve ardından iç içe geçmiş void*
'u alabilir ve istediğiniz türe döndürebilirsiniz.
Bütün bunlar, çözmeye çalıştığınız gerçek sorun nedir? Muhtemelen 'a numaralı C++ - deyimsel bir yaklaşım vardır.
Kendi tür bilginiz dahil, bunu yapmanın tek yolu olabilir. Eğer void * 'e ihtiyacınız varsa, her zaman size doğru veri tipi verildiğini varsaymak zorundasınız. http://stackoverflow.com/questions/4131091/dynamic-cast-from-void –
void * 'den kaçınmak en iyisi olsa da, bazen bir kanca sağlamak için kullanmanız gerekir. Örneğin, çok iş parçacıklı kod yazdığımda, 'pthread_create', void * (* func) (void *)' türünde bir işlev göstergesini bekler, çünkü hangi türlerin kullanmak isteyebileceğini bilemez. (Evet, pthreads kullanıyorum, kullanmam gereken derleyici C++ 11'i desteklemiyor.) –
@KyleA: Çünkü pthreads' C, C++ 98 bile değil. C++ 98'de 'class Runnable {sanal geçersiz run() = 0; sanal ~ Runnable();} '. – MSalters
Şunu mu demek istediniz: İşaretçi * aslında bir * kart 'nesnesinin işaret edip etmediğini öğrenmek ister misiniz? Çoğu durumda bir işaretçiyi dönüştürebilir, ancak dönüştürmeyi dönüştürmeden sonra kullanamazsınız. –