Мне нравится ответ кайара. Если вы не хотите прикасаться к входным файлам, и если вы используете CMake, вы можете добавить последовательности символов деления в файл. Следующий код CMake, например, копирует входные файлы и соответственно переносит их содержимое:
function(make_includable input_file output_file)
file(READ ${input_file} content)
set(delim "for_c++_include")
set(content "R\"${delim}(\n${content})${delim}\"")
file(WRITE ${output_file} "${content}")
endfunction(make_includable)
# Use like
make_includable(external/shaders/cool.frag generated/cool.frag)
Затем включите в c ++, как это:
constexpr char *test =
#include "generated/cool.frag"
;
Язык Felix John Skaller разработан, чтобы взаимодействовать с C++ и обеспечить функциональную парадигму.
Существуют проблемы с выполнением этого все же. Функциональные языки обеспечивают первоклассные функции, которые позволяют создание закрытий: функции, которые получили и несут значения от среды, в которой они были определены. Это лишает возможности определять время жизни значений статически (потому что закрытие могло бы нести значение из своего объема), и, следовательно, эффективно требует сборщика "мусора", но C++ не собран "мусор".
C++ не имеет экосистемы в смысле Java или.NET. Нет никакой виртуальной машины, никакая среда выполнения даже, существует только узкоспециализированная стандартная библиотека, которая дизайном не работает хорошо в чисто функциональной среде. C++ даже не имеет стандарта ABI.
Учитывая все обстоятельства, я не уверен, что Вы означаете/ожидаете.
А-ч, что-то еще. Хотя это, конечно, не то, что Вы имели в виду, шаблонное метапрограммирование в C++ чисто функционально.
Как был сказан, я не действительно уверен в C++ 'экосистема'. Но у Haskell действительно есть Внешний Функциональный Интерфейс, который позволяет, Вы для вызова C функционируете от функций Haskell и Haskell от C.
С другой стороны это - C, я не действительно уверен, как далеко вдоль C++ FFI...
Так как Scala компилирует в байт-код Java и компиляции F# в байт-код.NET, сделанный работать на их соответствующих виртуальных машинах. Корректное сравнение было бы то, если существует некоторый функциональный язык, которые компилируют в подчиненный код машины, готовый работать на компьютере, и да, существует.
Я не думаю, именно это Вы имели в виду, хотя, но лучшим, который я должен предложить, является FC ++. Повышение является другой библиотекой, которая имеет много функций, которые могут быть распознаны, как получено из функционального программирования.
Однако я держал бы пари, что нет никакого 'реального' функционального программирования C ++:es там.
Язык 'D' был разработан как преемник C++. Чисто функциональное подмножество D разрабатывается Andrei Alexandrescu для D 2.0. Я предполагаю, что D взаимодействует хорошо с C++.
Я соглашаюсь, что я не уверен в экосистеме для C++. OCaml довольно популярен для того, чтобы сделать функциональное программирование за пределами.NET. F# также базируется прочь его.
C++ не может быть чистым функциональным языком, но компоненты STL, конечно, функциональны.
Посмотрите Bjarne Stroustrup FAQ (изобретатель C++)