gpt4 book ai didi

c++ - 多操作系统编译上的 boost::shared_ptr 与 std::tr1::shared_ptr

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:47 26 4
gpt4 key购买 nike

我为 windows 和 mac 系统的浏览器插件(c++)维护了不同的代码。代码的不同之处仅在于共享指针。
在 Windows 版本中,我使用的是 std::tr1::shared_ptr,而在 Mac 版本中,我使用的是 boost::shared_ptr。

现在我想将这些代码合并为一个。我想在两个代码中都使用 std::tr1::shared_ptr 并维护单个源代码,但有两个不同的解决方案/项目文件夹。此浏览器插件支持 OSX 10.5 及更高版本。目前我正在 Xcode 4.6.2(Apple LLVM 编译器)中编译。基本上我是 Windows 程序员,主要在 Visual Studio 上工作。

我的问题是 Mac 旧版本是否会通过此更改支持插件。这是个好主意吗?请让我知道 boost 在这种情况下是否有用。

最佳答案

首先,boost::shared_ptrstd::tr1::shared_ptr 几乎相同,但如果可以的话,您应该使用 std: :shared_ptr 而不是启用 C++11 支持(我认为 VS12 上的默认设置,将在 clang/llvm 中启用)。

shared_ptr 是一个包含指针的模板类,因此在编译程序时会实例化整个代码:原始类实现驻留在一个头文件中,该头文件包含在您的翻译单元中(每个正在构建单独的文件)。

因此,您不需要任何特定的库来使用 shared_ptr(在 Mac 上既不需要 .dll 也不需要 .so 或其他东西)。因此,您的程序将在为其构建的任何机器上运行,您不需要额外的库来运行它。

出于兼容性原因,您还可以在 shared_ptr 周围使用自己的包装器:

namespace my_code {
#if defined(_STD_TR1_SHARED_PTR)
using std::tr1::shared_ptr;
#elif defined(_STD_SHARED_PTR)
using std::shared_ptr;
#else
using boost::shared_ptr;
#endif
}

因此您可以访问 my_code::shared_ptr,它将根据您定义的宏解析为适当的类型。请注意,这仅在您为所有这些类型使用兼容的接口(interface)时才有效,但情况应该如此。

关于c++ - 多操作系统编译上的 boost::shared_ptr 与 std::tr1::shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17042443/

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