Реализую мост от Ocaml к C ++. Насколько я знаю, только функции, привязанные к стороне OCaml с использованием ключевого слова external , должны определяться как функция C (это необходимо для компоновщика). Значит, они должны содержаться в блоке extern "C" { ... }
. За исключением этого момента, я могу использовать код C ++ по своему усмотрению (включая использование в функциях, объявленных в блоке ** extern "C" **).
Чтобы улучшить читаемость, я хочу обернуть макросы из "caml /mlvalues.h ", например
namespace Caml {
namespace Value {
int to_int(value x) { return Int_val(x); }
value of_int(int x) { return Val_int(x); }
...
}
}
, и использовать Caml::Value::to_int
и Caml::Value::of_int
вместо исходных Int_val
и Val_int
. Но для меня это выглядит опасно из-за макросов, побитового копирования и областей видимости. Безопасно ли использовать фасад, подобный описанному выше?