2

我正在运行的代码可能会boost:bad_lexical_cast在投射一系列标记时抛出 - 但我无法进入代码并“将标记放在一边”,因此我可以找出实际失败的投射。

是否boost:bad_lexical_cast让您访问它试图以某种方式强制转换的字符串?除了一些关于类型名称的字段外,我似乎在它的定义中找不到任何东西,但也许我缺少一些东西。

4

1 回答 1

0

如果您可以控制调用 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();
}
于 2016-04-13T15:22:05.010 回答