gpt4 book ai didi

c++ - 沙盒异常(外部库和 std::lib)

转载 作者:太空狗 更新时间:2023-10-29 23:14:47 24 4
gpt4 key购买 nike

我看过Mike Acton's talk on Data-Oriented Design and C++ .正如他在 8 分钟 30 秒时所说,他们不使用异常,他们不能强制它在第三方库上关闭。因此,他们对这些库进行了“沙盒处理”。

我的问题是:

1.当我的代码库在禁用异常的情况下运行时,使用异常“围绕”库“沙盒化”到底是什么意思,它是如何工作的,我该怎么做? (平台(Win/Linux/Mac、游戏机或移动设备)是否存在差异?)

2. 当使用标准库(它使用异常,如 new 和类似的东西)时,我如何“沙盒化”它们 - 或者它的原理与在 1.?

最佳答案

您可以通过将异常缓存在包装器中来对其进行沙箱处理。假设您有:

  • 确实使用异常的第三方库 T
  • 您的应用程序 A 不使用异常。

然后您创建一个包装器 W(编译时启用异常),它将包装 T 但捕获所有存在的异常,例如,替换为和错误代码,像这样:

// this one comes from the original library T that throws exceptions
void someFunctionInT();

// this will be your wrapper around the function above
int someFunctionInW()
{
try
{
someFunctionInT();
}
catch (...)
{
return -1;
}

return 0;
}

因此,通过这种方式,您的包装器 W 不应抛出任何异常,并且您可以针对您的应用程序 A 使用安全链接。

显然,这只是一个简单的例子。但是此时您已经为异常处理“付费”了,您可以做一些“更高级”的事情。例如,您可以测试异常并返回不同的错误代码,或者准备一条错误消息以从另一个函数等中检索,等等...取决于您的创造力。 :-)

关于c++ - 沙盒异常(外部库和 std::lib),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32164592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com