在v8中使用cpp对象作为参数执行js函数

时间:2014-02-10 05:49:42

标签: c++ v8

是否可以在v8中使用cpp对象作为参数执行js函数?

如果是,那么如何?

让我们说javascript中有一个函数来遍历节点树。

function traverse_tree(root)    /* root is type of Node */
{
    no_of_node++;   /* no_of_node is a global variable in js */
    for(var i=0;i<root.children.length;i++)
    {
        traverse_tree(root.children[i]);
    }
}

,Node树是用C ++创建的;

class Node
{
    public:
        std::vector<Node*> children;
}

如何在函数调用参数中传递cpp中创建的树结构的根?

1 个答案:

答案 0 :(得分:0)

简答

不,您无法从javascript访问实际的C ++对象。

  • Webkit桥通过在特定名称的javascript中提供C ++对象的方法来工作。
  • 简单变量(如字符串或整数)可以作为参数传递给这些函数调用。
  • 只要它们是HashMaps(键值对),就可以传递更复杂的对象。

这意味着无法传递引用,以便javascript和C ++“共享”该对象。

可能的实施

  1. 您可以在C ++应用程序中创建一个方法(作为单独的类或作为Node的一部分)并将该对象公开给javascript。然后,您需要的任何实现(例如搜索特定项)都可以在C ++中完成。通过这种方式,您已经为您的C ++应用程序功能创建了一个javascript API。
  2. 如果你真的需要在javascript中进行处理,那么你必须找到一种方法将你的树转换成某种HashMap(这样它作为一个JSON对象有意义),然后将它作为参数返回给的JavaScript。