沙箱异常(外部库和std :: lib)

时间:2015-08-23 08:16:05

标签: c++ exception

我看过Mike Acton's talk on Data-Oriented Design and C++。 正如他在8分30秒时所说的,他们不会使用例外,他们不能强迫它在第三方图书馆关闭。因此,他们"沙箱周围"这些图书馆。

我的问题是:

1 什么是"沙盒周围"使用异常的库,当我的代码库以禁用的异常运行时,它是如何工作的,我该怎么做? (平台上有差异(Win / Linux / Mac,游戏机还是手机?)

2。当使用标准库(使用例外情况,如new和类似情况时)我是如何使用标准库"沙盒"它们 - 或者它与1中的原理相同。?

1 个答案:

答案 0 :(得分:0)

您可以通过在包装器中缓存异常来沙箱化异常。让我们假设你有:

  • 使用例外的第三方库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

显然,这只是一个简单的例子。但是你可以做一些事情,而且可以做更多的事情。曾经在这个时候你已经"付了"用于异常处理。例如,您可以测试异常并返回不同的错误代码或准备从其他函数等中检索的错误消息等等......这取决于您的创造力。 : - )