代码之家  ›  专栏  ›  技术社区  ›  Quentamia

Emscripten:在JavaScript中从C++实现一个可变模板类

  •  0
  • Quentamia  · 技术社区  · 3 年前

    想象一下,我在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 具有

    有人有更好的方法吗?

    0 回复  |  直到 3 年前