C++11 эквивалентно std::quoted введено в C++14
Как используется в этом ответе, я ищу C++11-совместимый код для того же, но с использованием std::quoted
мешает мне достичь этого. Кто-нибудь может предложить альтернативное решение?
1 ответ
Я даю свой ответ, предполагая, что вы ожидаете найти общий подход к таким ситуациям. Главный вопрос, который определяет руководство для меня:"Как долго я должен поддерживать этот код для более старой версии компилятора?"
- Если я уверен, что он будет перенесен в новый набор инструментов вместе с остальной частью кода (хотя и через несколько лет, но это неизбежно произойдет), тогда я просто скопирую и вставлю реализацию из стандартных заголовков следующая целевая версия моего компилятора и положить его в
namespace std
в отдельном заголовке в моей базе кода. Несмотря на то, что это очень грубый взлом, он гарантирует, что у меня точно такая же версия кода, что и после миграции. Когда я начну использовать более новый (в данном случае C++14-совместимый) компилятор, я просто удалю свой собственный"quoted.h"
, и это все.
Важное предупреждение: Барри предложил скопировать и вставить реализацию gcc, и я согласен, пока gcc
ваш основной целевой компилятор. Если это не так, то я бы взял тот из вашего компилятора. Я делаю это заявление явно, потому что у меня были проблемы, когда я пытался скопировать GCC std::nested_exception
в мою базу кода и, переключившись с Visual Studio 2013 на 2017, заметил несколько отличий. Кроме того, в случае gcc
Обратите внимание на свою лицензию.
- Если я нахожусь в ситуации, когда мне придется некоторое время поддерживать совместимость с этим старым компилятором (например, если мой продукт ориентирован на несколько версий компилятора), то в первую очередь предпочтительнее посмотреть, есть ли подобная функциональность доступно в Boost. И есть, в большинстве случаев. Так что проверьте на сайте Boost. Хотя говорится
"Указанные" манипуляторы ввода / вывода для строк еще не приняты в Boost в качестве общедоступных компонентов. Таким образом, заголовочный файл в настоящее время находится в
Вы можете использовать его из "Boost / Detail". И я твердо верю, что это все же лучше, чем писать собственную версию (несмотря на рекомендации Synxis), хотя последняя может быть довольно простой.
- Если вы обязаны поддерживать старый набор инструментов и не можете использовать Boost, ну... тогда, возможно, действительно стоит подумать о внедрении собственной реализации.