2010-02-26 18 views
7

Soruyu kısa bir konu satırında çok iyi ifade etmeyi bilmiyorum, bu yüzden daha uzun bir açıklama yapmayı deneyeyim. Bunları istisna sınıfları olduğunu varsayalım:Bir dönüşüm operatörünün türüne göre bir istisna yakalayabilir misiniz?

class ExceptionTypeA : public std::runtime_error 
{ 
    // stuff 
}; 

class ExceptionTypeB : public std::runtime_error 
{ 
    // stuff 

    operator ExceptionTypeA() const; // conversion operator to ExceptionTypeA 
}; 

Sonra bunu yapabilir ve bu catch bloğu tetikler mi?

try 
{ 
    throw ExceptionTypeB(); 
} 
catch (ExceptionTypeA& a) 
{ 
    // will this be triggered? 
} 

ben talihsiz olan, böyle olmaz tahmin gidiyorum, ama net veya SO üzerinde kendisine herhangi bir bilgi bulamadık çünkü ben, sormak düşündüm. Ve evet, programın derleyicimde çalıştırılabileceğini ve ne olduğunu görebildiğimin farkındayım, ama bu bana bu derleme hakkında ne diyorsa, derleyicimin uyguladığı şeyi (ve ona güvenmiyorum) söyleyemedi.

cevap

13

Yapamazsınız. 15.3/3 de Standardese:

  • işleyici tip cv T veya cv T& ve E ve T, aynı türde bir ise bir işleyici E tipinde bir durum nesne için bir eşleşme olduğu (üst yada kubbe göz ardı seviye sitotoksinin elemeleri) veya
  • işleyici tip cv T veya cv T& ait T E açık bir halka temel sınıftır veya
  • işleyici tipaitve E ya da her ikisi ile işleyici tipine dönüştürülebilen bir işaretçi türüdür
    • özel işaretçiler dönüşümleri veya korumalı veya belirsiz sınıfları
    • içermeyen standart bir işaretçi Dönüşüm (4.10)
    • bir nitelik dönüşümü

Sizin arzu senaryo bunların hiçbiri eşleşir. cv, "const ve/veya volatile kombinasyon" anlamına gelir

+1

Phew. Burada rahat bir nefes. – sbi

+0

bu üye işaretçisini kapsıyor mu? örneğin, üye verilere işaretçi kontravaryant, yani int (Base :: *) 'int (Türetilmiş :: *)' ye dönüştürülebilir. Eskiyi atarsam ikincisini yakalayabilir miyim? gcc katılmıyorum gibi görünüyor, ama standart ifadeler biraz belirsiz. – max

İlgili konular