簡體   English   中英

捕獲boost :: bad_lexical_cast時,我可以訪問要投射的字符串/令牌嗎?

[英]When catching a boost::bad_lexical_cast, can I access the string/token which was to be cast?

我正在運行的代碼可能會在投射一系列令牌時拋出boost:bad_lexical_cast但我無法進入代碼並將令牌“拋在一邊”,因此我可以弄清楚實際投放失敗了。

boost:bad_lexical_cast是否boost:bad_lexical_cast讓您訪問它嘗試以某種方式進行轉換的字符串? 除了有關類型名稱的某些字段外,我似乎在其定義中找不到任何內容,但也許我缺少一些內容。

如果您可以控制調用lexical_cast的代碼,則可以使用try函數塊來捕獲,包裝和重新拋出帶有額外信息的異常:

#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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM