2016-04-06 13 views
1

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?

+0

Ş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. –

cevap

1

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.

+0

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 –

+0

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.) –

+0

@KyleA: Çünkü pthreads' C, C++ 98 bile değil. C++ 98'de 'class Runnable {sanal geçersiz run() = 0; sanal ~ Runnable();} '. – MSalters

İlgili konular