假设在 C++ 中我有一个具有以下签名的函数:
A<B> getTemplatedClassInstance();
其中 A & B 是一些类。然后,我尝试生成 WebIDl 绑定以在 emscripten 构建中使用,以使用来自 Javascript 的 C++ 代码。我有一个工作绑定文件,其中包含可以从 JS 绑定和访问的各种其他类、枚举等,但我不知道如何表示模板化类型(上例中的 A 类)。我尝试了各种 WebIDL 绑定声明的组合,例如:
interface A {};
interface A<> {};
interface A<B> {};
interface C {
A<B> getTemplatedClassInstance();
};
interface C {
A getTemplatedClassInstance();
};
但是任何使用尖括号 '<>' 都会从用于构建它的 webidl_binder.py 脚本(包含在 emscripten sdk 中)生成语法错误,如果我将 A 的声明和使用保留为未模板化,则构建绑定文件,但是与 C++ 库的绑定的最终 emscripten 编译(emcc ...)在绑定 cpp 文件中失败:
错误:使用类模板需要模板参数
这是有道理的。奇怪的是,WebIDL 文档根本没有提到模板类型。我在网上搜索并找到了一个使用“Embind”绑定特定模板实例的单一引用,但没有关于 WebIDL 的内容。