Emscripten类构造函数采用std :: vector <t>

时间:2018-11-01 19:31:46

标签: javascript c++ emscripten

我想知道是否有人可以帮助我为Emscripten中的C ++类绑定,该类采用std::vector<T>作为构造函数。我想要以下内容:

EMSCRIPTEN_BINDINGS(my_class) {

    emscripten::class_<test_class>("test_class")
        .constructor<std::vector<float>>()
        .property("x", &test_class::get_x, &test_class::set_x)
        ;
}

我阅读了this post,并实现了一个代理功能,将由var inputArray = new Float32Array([1,2,3]创建的JS浮点数组带到std::vector<float>

但是,当我将inputArray用作类构造函数的参数时,会收到以下警告:

5258048 - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.

我在DISABLE_EXCEPTION_CATCHING=2步骤中添加了emcc标志,但是,这不会产生任何不同的输出。

还有其他人想出解决方案吗?

1 个答案:

答案 0 :(得分:0)

关键是要确保使用register_vector为std :: vector定义了映射,以便可以将复制函数创建的向量传递回JavaScript,然后再传递回C ++。

如果我正确理解了您的问题,此代码似乎对我有用:

{
    this.state.products.map(function(prod) { 

        return <tr><td>{prod.x}</td><td>{prod.y}</td></tr>;
    })
}

此示例代码假设从Float32Array到std :: vector(在JS中表示为VectorFloat代理对象)进行了无效复制,并假设您已使该部分正常工作,并专注于将向量传递给构造函数。 / p>