Использование C ++ 17 ‘any’ с Xcode 8.1

Я использую C ++ в версии Xcode 8.1. Мне нужно использовать функциональность boost::any но я категорически против включения любой части Boost в наш проект (давайте не будем это обсуждать, пожалуйста).

я вижу это std::any «объединен в C ++ 17» Вот.

Я хочу использовать это в моем проекте Xcode 8.1. Я пытался использовать -std=c++1z как пользовательский флаг для проекта, но я не могу найти заголовок для него.

Как я могу использовать std::any или же std::experimental::any в моем проекте XCode?

Могу ли я загрузить соответствующие заголовки из реализации и добавить их в исходный код моего проекта? Или, что еще лучше, на самом деле сейчас доступно в моей версии Xcode / Clang / C ++?

6

Решение

Вы не можете сказать «Я хочу компилятор Xcode по умолчанию [который не поддерживает any] «и одновременно просить его поддержать any, Вы также не можете смешивать заголовки стандартной библиотеки для разных версий компилятора.

Вы также можете

  • использовать версию компилятора, которая обеспечивает std::any или же
  • использовать любую стороннюю библиотеку, которая предоставляет другую anyтипа
6

Другие решения

В вашей установке нет стандарта c ++ 17. std::any просто не доступен для вас, пока вы не получите компилятор с хотя бы экспериментальной поддержкой того, что вы хотите.

Clang Cxx Status

Вам бы повезло больше, просто используя boost::any наверное.

Если вы действительно не хотите привлекать стороннюю библиотеку, реальность такова, что вы создаете свою собственную any не так сложно Я не рекомендую изобретать велосипед, но в этом случае это не так сложно.

Вот SO вопрос с ответом, показывающим способ сделать «любой».

2

Незаконно вводить новые типы в std через стороннюю библиотеку. Вы можете обновить свой компилятор, получить отдельную стандартную библиотеку, которую поддерживает ваш компилятор, или использовать стороннюю библиотеку, которая предоставляет any в другом пространстве имен или напишите свое собственное.

Первое, что вы сказали нет.

Второе сложно, так как xcode не афиширует, каким на самом деле является его компилятор. Обычно есть две общие библиотеки std, которые работают с компиляторами, производными от clang-llvm; libc ++ и libstdc ++. Такой тип обмена, как правило, очень дорогой, даже если у другого есть нужная вам функция.

Третий в основном «использовать boost» или эквивалент.

Последнее не сложно; работа в течение нескольких дней (в основном ошибки после факта), основанная на написании типов схожей сложности, при условии, что «достаточно хороший» достаточно хорош (т. е. не увяз в идеальных гарантиях исключений или не соответствует точно стандарту и т. д.) Реализация потребует гиперболических усилий, чтобы приблизиться к совершенству, естественно.

2

Бета-версия Xcode 9.0 теперь может быть загружена (https://developer.apple.com/download/). Он поддерживает параметр флага c ++ 17.

Редактировать: Xcode 9.2 публично доступен с поддержкой std :: any.

2
По вопросам рекламы [email protected]