想象一下,我在 C++ 中有以下可变参数类:
template<typename... Ts>
class IFoo {
virtual bar(Ts... values) = 0;
};
我想在 JavaScript 中实现这个类。为此,我必须创建一个包装器。
template<typename... Ts>
struct FooWrapper : public emscripten::wrapper<IFoo<Ts...>> {
EMSCRIPTEN_WRAPPER(FooWrapper);
// Implement the class' functions.
}
这会导致错误:
error: member initializer 'wrapper' does not name a non-static data member or base class
FooWrapper(val &&v, Args &&... args) : wrapper(std::forward<val>(v), std::forward<Args>(args)...) {
我可以通过传入一个具体类型来解决这个问题,而不是FooWrapper
作为一个模板。
struct FooWrapper_String_Bool : public emscripten::wrapper<IFoo<std::string, bool>> {
EMSCRIPTEN_WRAPPER(FooWrapper_String_Bool);
// Implement the class' functions.
}
但这需要我为实例化的每个可能值创建一个新结构IFoo
。
有没有人有更好的方法来做到这一点?