2016-12-11 48 views
6

我在Xcode版本8.1中使用C++。我需要使用boost::any的功能,但我强烈反对将Boost的任何部分加入到我们的项目中(我们不要讨论它)。在Xcode 8.1中使用C++ 17'any'

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

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

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

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

+0

Xcode是一个IDE。它带有一个编译器,但不需要使用该编译器。 – Yakk

+2

我明白,但我想使用香草Xcode 8.1安装,它是默认的编译器。 Xcode也不是C++实现,我也理解。我想使用默认情况下作为Xcode用户可用的C++实现。 –

+1

我强烈反对回答这个问题(让我们不要辩论吧)。不,你不能只是“把它们扔到你的项目的源代码中”。你要走出自己的路,让生活尽可能复杂和困难。我不会支持这一点。 –

回答

6

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

您可以

  • 使用编译器的版本,它提供std::any
  • 使用任何第三方库,它提供了另一种any样类型。
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'

2

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

第一个你说的不对。

第二个是很难的,因为xcode不会通告它的编译器实际是什么。通常有两个常见的std库与clang-llvm派生的编译器一起工作; libC++和libstdC++。即使另一个具有您想要的功能,这种交换往往会非常昂贵。

第三个基本上是“使用boost”或同等学历。

最后并不难;假设“足够好”足够好(即,没有陷入理想的异常保证或准确地匹配标准等),基于类似的复杂性编写类型,几天的工作(大部分是错误)。自然而然,实施将需要双曲线的努力才能达到完美。

2

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

+1

是的!这是个好消息。 –

+0

@Zammbi你可以提供的任何链接 –

+0

你必须登录Apple开发者:https://developer.apple.com/download/目前它处于beta 5中。所以在发布最终版本之前不要太长。 – Zammbi