Is there a way to use C++ in JavaScript?
WCPP is a package that lets you import C++ nearly directly into your Node project. Disclaimer: I am the maintainer of this project.
Our C++
// addTwo.cpp
export int addTwo(int a, int b) {
return a + b;
}
In the terminal
$ wcpp
Our JavaScript
const ourModule = await require('wcpp')('./addTwo.cpp')
console.log(ourModule.addTwo(2, 3))
For more information, see the NPM Package or the Git Repo
The emscripten project allows you to to generate Javascript from C and C++:
Emscripten is an LLVM-to-JavaScript compiler. It takes LLVM bitcode - which can be generated from C/C++, using llvm-gcc (DragonEgg) or clang, or any other language that can be converted into LLVM - and compiles that into JavaScript, which can be run on the web (or anywhere else JavaScript can run).
and through methods like ccall and cwrap you can call C functions:
Using the example from the site, this C++ code which used extern "C"
to prevent name mangling:
#include <math.h>
extern "C" {
int int_sqrt(int x) {
return sqrt(x);
}
}
can be compiled like so:
./emcc tests/hello_function.cpp -o function.html -s EXPORTED_FUNCTIONS="['_int_sqrt']"
and used in Javascript:
int_sqrt = Module.cwrap('int_sqrt', 'number', ['number'])
int_sqrt(12)
int_sqrt(28)
embind can be used for C++ functions and classes. The quick example from the site is as follows:
// quick_example.cpp
#include <emscripten/bind.h>
using namespace emscripten;
float lerp(float a, float b, float t) {
return (1 - t) * a + t * b;
}
EMSCRIPTEN_BINDINGS(my_module) {
function("lerp", &lerp);
}
and compile:
emcc --bind -o quick_example.js quick_example.cpp
and use in Javascript:
<!doctype html>
<html>
<script src="quick_example.js"></script>
<script>
console.log('lerp result: ' + Module.lerp(1, 2, 0.5));
</script>
</html>