2012-03-22 15 views
5

Ben bazı örnek kodunu kullanmak çalışıyorum ve benim derleyici bu satırı derlemek olmaz: C++ 'da Bool <true> nedir - destekliyor mu?

static void exitActions(Host& h, Bool<true>) {} 

Compiler

MS VS2005 olduğunu. Bool'u tanımıyorum - nasıl değiştirileceğinden emin değilim.

static void exitActions(Host& h, bool b = true) {} 

örnek http://accu.org/index.php/journals/252 dan: Bu varsayılan parametre eşdeğerdir. Kod, metinde yalnızca snippet'tir - # include'd - neyin işe yaramadığı hakkında bir snippet yoktur. Bool şablonu için tanım yoktur.

+1

Bool bir türüdür ve excitActions muhtemelen bu türüne göre aşırı yüklü. Sorunu gördüğünüz hata mesajını ekleyebilir misiniz? – Marcin

+0

Peki, "exitActions" işlevinin boole argümanına yapılan tüm referansları büyük olasılıkla berbat olacak. Eğer 'bool' türündeki tüm referansları değiştirecekseniz, muhtemelen bazı şeylerin çökmesini beklemezsiniz, ama bunu daha akıllı cevaplara kadar bir ön cevap olarak düşünün. – prelic

+0

İmleci 'Bool 'konumuna getirdiğinizde ve" Tanıma git "seçeneğini kullandığınızda ne olur? – Naveen

cevap

5

sanırım Bool Bazı ilkel desen eşleştirme için kullanabilirsiniz

template <bool B> struct Bool{}; 

gibi tanımlanır:

elbette
void exitActions(Bool<true>) { std::cout << "called with true\n"; } 
void exitActions(Bool<false>) { std::cout << "called with false\n"; } 

int main() 
{ 
    exitActions(Bool<true>()); // prints "called with true" 
    exitActions(Bool<false>()); // prints "called with false" 
} 

Bu yalnızca Bool<false> ile Bool<true> eğer aşırı mantıklı. Ancak kaynakta http://accu.org/index.php/journals/252 (Marcin tarafından tahmin edilmiştir), durum böyle.

Orada da benzer işlev çağrısı

Tran<T,S,T>::entryActions(host_, Bool<false>()); 
+0

Bu tanımı kullanarak programı derlememi sağlıyor, teşekkürler. Bu programlama tarzı veya web bağlantısı için bir isim var mı. Aşırı yüklenmiş bir işleve benziyor mu? Doğru ya da yanlış geçip geçmediğinize bağlı olarak bir ya da diğeri bağımlı mı? Söylediğiniz gibi sadece kodun geri kalanı bağlamında anlam ifade ediyor - daha fazla çalışacağım. –

+0

Bunu daha önce hiç C++ 'da görmedim (diğer programlama dillerinde bu, önceden yazıldığı gibi desen eşleştirmesi olarak adlandırılır). Normalde, "template <> void exitActions () {...}" ve "template <> void exitActions () {...}' gibi bir şey yazabilirsiniz. Ancak bu sıklıkla kullanıldığı için, bunu 'Bool' türünü tanıtarak kısaltmaya karar verebilir. – ipc