2012-01-10 15 views
10

Bazı tanıtıcıların uygun şekilde atılmasını sağlamak için basit bir RAII sınıfına sahibim. Şimdi hiç kimsenin kazara herhangi bir sanal yöntem eklemeyeceğini iddia ediyorum. Gördüğüm şekilde, sınıfın vtbl işaretçisine sahip olmadığını iddia etmem gerekiyor.Belirli bir sınıfın düzeninde vtbl işaretçilerinin bulunmadığı nasıl iddia edilir?

Bunu nasıl yapabilirim? Derleme zamanında iddia edilebilir mi?

DÜZENLEME

Ben masaüstü derleyici razı olur. Bildiğim kadarıyla, polimorfizm uygulamak için vtbl kullanmayan masaüstü C++ derleyicileri yok. Eğer bir C++ 11 kütüphane varsa

+0

Teorik olarak, Bunu taşınabilir bir şekilde yapamazsınız. –

+0

_sealed_ sınıfı alma ilginizi çekebilir: http://stackoverflow.com/q/4712992/96780 –

+2

vtbl bir uygulama detayıdır. Sanal işlevleri uygulamak için çağrı tablolarını kullanmayan bir derleyici bulunabilir. Kendinizi belirli bir derleyiciyle kısıtlamak mı istiyorsunuz? – filmor

cevap

19

, sen std::is_polymorphic<T> kullanabilirsiniz:

T polimorfik sınıf (yani, beyan veya en az bir sanal işlevini devralan bir sınıftır) ise, sağlar üye sabit değeri eşittir. Diğer herhangi bir tip için, değer yanlıştır.

+0

Beni bu işe karıştır, +1. – jrok

+1

+1, güzel! Ayrıca, C++ 11'iniz yoksa ve Visual C++ uygulamanız varsa, __is_polymorphic var - http://msdn.microsoft.com/en-us/library/ms177194%28v=VS.90%29.aspx – sharptooth

+0

Nice . C++ 11'de daha fazla statik tip bilgi/yansıma özellikleri sunmayı dilerim (bir sınıf için alanların/yöntemlerin bir listesini elde etmenin bir yolu gibi). Bu, betik dilleri için sarmalayıcılar gibi bazı meta kodu oluşturmayı çok daha kolay hale getirir. – Kos

İlgili konular