2016-04-13 12 views
1

Bir jeton dizisi oluştururken boost:bad_lexical_cast atabileceğimiz bir kod çalıştırıyorum - ancak kodun içine giremiyorum ve "simgeleri bir kenara koyayım", bu yüzden aslında hangi dökümün başarısız olduğunu anlayabiliyorum.Bir boost :: bad_lexical_cast yakalarken, atılacak dize/jetona erişebilir miyim?

boost:bad_lexical_cast, bir şekilde yayınlamaya çalıştığı dizeye erişmenizi sağlıyor mu? Tür isimleri ile ilgili bazı alanlar dışında tanımında bir şey bulamadım, ama belki de eksik olduğum bir şey var.

+0

hala okunabilir halde iken buna izin vermek için nasıl yeniden düzenleyeceğimi göstereceğim. –

+0

@RichardHodges: 'try {foo(); } yakalamak (boost :: bad_lexical_cast & e) {/ * burada ne yapmalı? * /} ' – einpoklum

cevap

0

o zaman, yakalamak sarın ve blokları deneyin işlevini kullanabilirsiniz, lexical_cast çağıran kodun kontrol edebiliyor ekstra bilgilerle özel durum atması: Bunu yapacağımı bazı kod gösterebilir eğer

#include <boost/lexical_cast.hpp> 
#include <string> 
#include <stdexcept> 
#include <exception> 

struct conversion_error : std::runtime_error 
{ 
    conversion_error(const std::string& name, const std::string& value) 
    : std::runtime_error::runtime_error("converting " + name + " : " + value) 
    , name(name) 
    , value(value) 
    {} 

    const std::string name, value; 
}; 

struct test 
{ 

    void bar() 
    { 
    try { 
     foo(); 
    } catch(const conversion_error& e) { 
     std::cerr << e.what() << std::endl; 
    } 
    } 

    void foo() 
    try 
    { 
    i = boost::lexical_cast<int>(s); 
    } 
    catch(...) 
    { 
    std::throw_with_nested(conversion_error("s", s)); 
    } 

    std::string s; 
    int i; 
}; 

int main() 
{ 
    test a { "y", 0 }; 
    a.bar(); 
} 
+0

Saygılarımla - eğer 's' e erişebilseydim bu soruyu sormazdım ... konu şu ki, ona erişimim yok. – einpoklum

+0

@einpoklum beni affetti, ben sorumu yanlış anladım. –

+1

Affedilecek bir şey yok, yardım etmeye çalışıyordun. Bu SO, her ne kadar negatif geri bildirimle barbarlaştırılmış olmanız gerektiği anlamına geliyorsa da, sorularıma cevap vermek için zaman ayıran insanları kesinlikle takdir ediyorum :-) – einpoklum

İlgili konular