Обзор:
В веб-программировании файлы внешнего кода не обязательно должны находиться в одном каталоге или даже на одном компьютере. Например, я мог бы использовать:
<script src="file.js"></script>
включить файл .js из той же директории. Или же
<script src="https://www.domain.com/file.js"></script>
включить file.js с веб-сервера.
В настоящее время я пишу библиотеку C ++ для GitHub (это просто группа легких файлов C ++) и хочу, чтобы она была доступна для всех, чтобы она могла напрямую включать ее, даже не сохраняя ее вручную; Я хочу, чтобы прекомпилятор управлял временной загрузкой.
К сожалению, приведенный ниже код не работает:
#include "https://www.domain.com/file.h"
Замечания: Вопрос «Как?«не»Является ли это возможным?«и если вы считаете, что это недостижимо, я предполагаю, что вы не можете доказать свой ответ; поэтому, пожалуйста, оставьте его без ответа. Иначе, все решения приветствуются
Давайте отложим вопрос, если это хорошая идея или нет. Это вообще возможно? Вот что говорит стандарт о директиве #include:
Стандарт C ++ 14, 16,2 / 2 [cpp.include]
Директива предварительной обработки вида
#включают < h-char-sequence> новая строка
выполняет поиск в последовательности мест, определенных реализацией, для заголовка, уникально идентифицируемого указанным
последовательность между < и> разделители, и вызывает замену этой директивы всем содержимым
заголовка. То, как определяются места или определяется заголовок, определяется реализацией.
«Последовательность h-char» позволяет использовать символы из исходного набора символов:
2.3 [lex.charset]
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ
0 1 2 3 4 5 6 7 8 9
_ {} [] # () < >%:; , ? * + — / ^ & | ∼! знак равно
Ничто в этой формулировке ничего не говорит о том, где включенные файлы должны находиться физически. Также разрешены все символы, необходимые для полезных URI.
Эта проблема
Отсутствует компилятор C ++, о котором я знаю, и, конечно, никто из основных трех (Clang, GCC, MSVC) не реализует эту функцию.
Сделать
Полагаться на дополнительные инструменты не получится. В этом случае простое клонирование рассматриваемого репозитория является слишком простой и привычной задачей.
Итак, вот что вам нужно сделать:
Получите исходный код для соответствующих компиляторов, внедрите поддержку URI для #include (не забудьте, что время кэширования или компиляции будет ледниковым) и получите его как официальную функцию соответствующего компилятора.
Реализация поддержки в соответствующих системах сборки. Для начала предлагаю хотя бы сделать, CMake и GNU Autotools.
Сделайте много маркетинга, чтобы убедить сообщество C ++ использовать эту функцию.
Других решений пока нет …