在 Xcode 8.1 中使用 C++17 'any'
Using C++17 'any' with Xcode 8.1
我在 Xcode 8.1 版中使用 C++。我需要使用 boost::any
的功能,但强烈反对将 Boost 的任何部分拉入我们的项目(请不要争论)。
我看到 std::any
是 "merged into C++17" here。
我想在我的 Xcode 8.1 项目中使用它。我曾尝试在项目中使用 -std=c++1z
作为自定义标志,但我似乎找不到 header。
如何在我的 Xcode 项目中使用 std::any
或 std::experimental::any
?
我可以从实现中下载适当的 header 并将它们放入我的项目源代码中吗?或者,更好的是,在我的 Xcode/Clang/C++?
版本中实际上现在可用
你不能说"I want the default Xcode compiler [which has no support for any
]",同时要求它支持any
。您也不能为不同的编译器版本混合使用标准库头文件。
你可以
- 使用提供
std::any
或 的编译器版本
- 使用任何提供另一种
any
类型的第三方库。
您的安装设置不符合 c++17 标准。 std::any
除非你得到一个至少对你想要的东西有实验支持的编译器,否则你根本无法使用。
使用 boost::any
可能会好很多。
如果您真的不想使用第三方库,那么创建自己的 any
并不难。我不建议重新发明轮子,但在这种情况下并没有那么困难。
Here's a SO question with an answer showing a way to do 'any'.
通过第三方库将新类型注入 std
是非法的。您可以升级您的编译器,获得您的编译器支持的不同标准库,或者使用在另一个命名空间中提供 any
的第三方库,或者编写您自己的库。
第一次你说不。
第二个很难,因为 xcode 没有宣传其编译器实际上是什么。通常有两个与 clang-llvm 派生编译器一起使用的通用标准库; libc++ 和 libstdc++。即使另一个具有您想要的功能,这种交换往往非常昂贵。
第三个基本上是"use boost
"或等价物。
最后一个并不难;几天的工作(主要是事后的错误),基于类似复杂性的编写类型,假设 "good enough" 足够好(即,没有陷入理想的异常保证,或完全匹配标准等)。自然地,实现将需要双曲线的努力来接近完美。
Xcode 现在可以下载 9.0 beta (https://developer.apple.com/download/)。它支持 c++17 标志选项。
编辑:Xcode 9.2 公开可用 std::any 支持。
我在 Xcode 8.1 版中使用 C++。我需要使用 boost::any
的功能,但强烈反对将 Boost 的任何部分拉入我们的项目(请不要争论)。
我看到 std::any
是 "merged into C++17" here。
我想在我的 Xcode 8.1 项目中使用它。我曾尝试在项目中使用 -std=c++1z
作为自定义标志,但我似乎找不到 header。
如何在我的 Xcode 项目中使用 std::any
或 std::experimental::any
?
我可以从实现中下载适当的 header 并将它们放入我的项目源代码中吗?或者,更好的是,在我的 Xcode/Clang/C++?
版本中实际上现在可用你不能说"I want the default Xcode compiler [which has no support for any
]",同时要求它支持any
。您也不能为不同的编译器版本混合使用标准库头文件。
你可以
- 使用提供
std::any
或 的编译器版本
- 使用任何提供另一种
any
类型的第三方库。
您的安装设置不符合 c++17 标准。 std::any
除非你得到一个至少对你想要的东西有实验支持的编译器,否则你根本无法使用。
使用 boost::any
可能会好很多。
如果您真的不想使用第三方库,那么创建自己的 any
并不难。我不建议重新发明轮子,但在这种情况下并没有那么困难。
Here's a SO question with an answer showing a way to do 'any'.
通过第三方库将新类型注入 std
是非法的。您可以升级您的编译器,获得您的编译器支持的不同标准库,或者使用在另一个命名空间中提供 any
的第三方库,或者编写您自己的库。
第一次你说不。
第二个很难,因为 xcode 没有宣传其编译器实际上是什么。通常有两个与 clang-llvm 派生编译器一起使用的通用标准库; libc++ 和 libstdc++。即使另一个具有您想要的功能,这种交换往往非常昂贵。
第三个基本上是"use boost
"或等价物。
最后一个并不难;几天的工作(主要是事后的错误),基于类似复杂性的编写类型,假设 "good enough" 足够好(即,没有陷入理想的异常保证,或完全匹配标准等)。自然地,实现将需要双曲线的努力来接近完美。
Xcode 现在可以下载 9.0 beta (https://developer.apple.com/download/)。它支持 c++17 标志选项。
编辑:Xcode 9.2 公开可用 std::any 支持。