【问题标题】:Using C++17 'any' with Xcode 8.1在 Xcode 8.1 中使用 C++17 'any'
【发布时间】:2016-12-11 20:21:14
【问题描述】:

我在 Xcode 8.1 版中使用 C++。我需要使用boost::any 的功能,但我强烈反对将 Boost 的任何部分拉入我们的项目(请不要争论)。

我看到 std::any 被“合并到 C++17”here

我想在我的 Xcode 8.1 项目中使用它。我曾尝试在项目中使用-std=c++1z 作为自定义标志,但似乎找不到它的标题。

如何在我的 Xcode 项目中使用 std::anystd::experimental::any

我可以从实现中下载适当的标头并将它们放入我项目的源代码吗?或者,更好的是,现在在我的 Xcode/Clang/C++ 版本中实际上可以使用?

【问题讨论】:

  • 我明白,但我想使用 vanilla Xcode 8.1 安装,它是默认编译器。 Xcode 也不是 C++ 实现,我也明白这一点。我想使用默认情况下作为 Xcode 用户可用的 C++ 实现。
  • 我强烈反对回答这个问题(请不要辩论)。不,您不能只是“将它们放入 [您的] 项目的源代码中”。你正在竭尽全力让自己的生活变得尽可能复杂和困难。我不会支持的。
  • xcode 中的默认 clang 编译器还不支持 c++17,也不支持它的实验性扩展。
  • 是的,你可以。这就是boost::any
  • 我可以理解为什么不希望包含 Boost 的任何部分。但是,好吧,让我们不要争论它。不需要对这个问题感到如此强烈。至于问题。不幸的是,Xcode 8.1 clang 对 C++17 的支持不是很好。一些库功能在实验中可用。例如<experimental/optional>。 Apple 很久以前就停止报告它基于哪个版本的 LLVM。但如果我不得不猜测,我会说 LLVM 版本 3.7,基于 _LIB_CPP

标签: c++ c++17 stdany


【解决方案1】:

你不能说“我想要默认的 Xcode 编译器 [不支持 any]”,同时要求它支持 any。您也不能为不同的编译器版本混合标准库头文件。

你可以

  • 使用提供std::any 的编译器版本或
  • 使用提供另一种any-like 类型的任何第三方库。

【讨论】:

    【解决方案2】:

    您的安装设置不符合 c++17 标准。 std::any 根本不可用,除非你得到一个至少对你想要的东西有实验性支持的编译器。

    Clang Cxx Status

    你可能只使用boost::any 会好很多。

    如果您真的决定不使用第三方库,那么创建自己的any 并不是那么困难。我不建议重新发明轮子,但在这种情况下,这并不难。

    Here's a SO question with an answer showing a way to do 'any'.

    【讨论】:

      【解决方案3】:

      通过第三方库将新类型注入std 是非法的。您可以升级编译器,获取编译器支持的不同 std 库,或使用在另一个命名空间中提供 any 的第 3 方库,或编写自己的。

      你第一次拒绝。

      第二个很难,因为 xcode 并没有宣传它的编译器实际上是什么。通常有两个常见的标准库可以与 clang-llvm 派生的编译器一起使用; libc++ 和 libstdc++。即使另一种具有您想要的功能,这种交换也往往非常昂贵。

      第三个基本上是“使用boost”或等效的。

      最后一点并不难;几天的工作(主要是事后的错误),基于编写类似复杂性的类型,假设“足够好”已经足够好(即,没有陷入理想的异常保证,或者完全匹配标准等)。自然地,实现将需要双曲线的努力来接近完美。

      【讨论】:

        【解决方案4】:

        现在可以下载 Xcode 9.0 beta (https://developer.apple.com/download/)。它支持 c++17 标志选项。

        编辑:Xcode 9.2 在 std::any 支持下公开可用。

        【讨论】:

        • @Zammbi 您可以提供的任何链接
        • 你必须登录Apple Developer:developer.apple.com/download 目前它是beta 5。所以在他们发布最终版本之前应该不会太久。
        猜你喜欢
        • 2017-10-12
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-16
        • 2017-05-08
        • 2020-10-21
        相关资源
        最近更新 更多