C++ to WebAssembly conversions
This page shows what is automatically translated and to what.
On the left is the C++
and to the right what the corresponding interface in javascript
will be.
Not converted means there will be no automatic translation to a corresponding javascript
object.
Note that any restriction this poses only applies to the public interface of your code (e.g. your public headers).
Conversion tables
C++ | WebAssembly translation |
---|---|
Namespace | Object namespace |
Nested namespace | Nested object namespace |
Class | Class |
Public function | Class function |
Private function | Not converted |
Virtual function | Overridable function |
Static member function | Static class function |
Static member variable | Static member variable |
Public const member variable | Read only property |
Public non const member variable | Read write property |
Private member variable | Not converted |
Global variable | Module variable |
Global static variable | Module variable |
Free function | Module function |
Overloaded function | Module function* |
Enum | Enum |
Scoped enum | Enum |
Templated class/function | Not converted** |
Specialized class template | Class*** |
Specialized function template | Function**** |
* Changes the name of the function based on the arguments to avoid clashes.
** No direct translation to javascript
. Will not emit warning.
*** The naming convention for these classes can be found under the Template Naming Convention page.
**** Functions with different template arguments will behave as overloaded functions.
C++ Standard library class | WebAssembly translation |
---|---|
std::array | array |
std::complex | ??? |
std::deque | ??? |
std::filesystem::path | ??? |
std::forward_list | Not converted |
std::function | ??? |
std::list | ??? |
std::map | Map Object* |
std::multimap | Not converted |
std::multiset | Not converted |
std::optional | ??? |
std::pair | array |
std::priority_queue | Not converted |
std::queue | Not converted |
std::set | ??? |
std::shared_ptr | ??? |
std::stack | Not converted |
std::tuple | ??? |
std::unique_ptr | Value** |
std::shared_ptr | Value |
std::unordered_map | ??? |
std::unordered_multimap | Not converted |
std::unordered_multiset | Not converted |
std::unordered_set | ??? |
std::valarray | ??? |
std::variant | ??? |
std::vector | Vector Object*** |
* Converted via the register_map
function (behaves like an Object
in javascript
).
** Note that arguments of type unique_ptr<T>
are not supported. For more info see here.
*** Converted via the register_vector
function (behaves like an Object
in javascript
).
C++ builtin type | WebAssembly translation |
---|---|
bool | true |
char | Number |
char16_t | Number |
char32_t | Number |
double | Number |
float | Number |
int | Number |
int8_t | Number |
int16_t | Number |
int32_t | Number |
int64_t | Number |
long double | Number |
long int | Number |
long long int | Number |
short int | Number |
signed char | Number |
string | ArrayBuffer, Uint8Array, Uint8ClampedArray, Int8Array, or String |
string_view | String* |
uint8_t | Number |
uint16_t | Number |
uint32_t | Number |
uint64_t | Number |
unsigned char | Number |
unsigned int | Number |
unsigned long int | Number |
unsigned long long int | Number |
unsigned short int | Number |
wchar_t | Number |
* Only works for globals (see examples)