带有 printf 样式字符串的 C++ 异常类?

Bri*_*and 6 c++ c++11

在 C++11 中,是否有一种简单的(甚至更好的内置)方法来执行此类操作以在异常中执行 printf 样式的字符串?

throw std::runtime_error( "Failed to open '%s' [%d]: %s", 
         filename, errno, strerror(errno) );
Run Code Online (Sandbox Code Playgroud)

我知道我可以snprintf给一个 `char []' 然后将结果传递给一个异常构造函数,或者先转换为 std::string 。

只是想知道 C++11 是否提供更好/更简单的东西。

Bau*_*gen 5

从 C++11 开始,您可以从以下构造异常std::string

std::runtime_error("Failed to open " + std::string(filename) + std::to_string(errno));
Run Code Online (Sandbox Code Playgroud)

这有一个轻微的缺点,即 的构造函数std::string可能throw并因此终止您的程序。但是,这应该只在处理某种“内存不足”异常时起作用。