【发布时间】:2017-11-10 03:57:43
【问题描述】:
我正在编写代码来解析 C++ 中的复杂字符串并从中创建一棵树。我想在 Visual Studio 2017 中使用 C# 来调用返回节点向量的本机 c++ 方法。
一个节点看起来像:
class node
{
public:
std::vector<node> subnodes;
std::string name;
};
c++ 函数可能如下所示:
class noderizer
{
public:
node getNodes(std::string str);
};
调用noderizer::getNodes(...) 成员并为c# 创建等效类的最有效(编码时间,其次是速度)方法是什么?
我假设最好的方法是在 c# 中创建一个重复的类定义,然后将本机 std::strings 编组到托管 Strings"
public class node
{
public string name = string.Empty;
List<node> integers = new List<node>();
}
尚不清楚this article 是否包含c++ 互操作的最新信息,但有关wrapping c++ native classes 用于c# 的相关文章表明我很可能只是将noderizer 本机c++ 包装为noderizer * m_Impl;,然后调用getNodes 成员并复制每个参数。这是正确的方法吗?
【问题讨论】:
-
是的,您可以使用托管 C++,通过 COM 公开您的 C++ 方法,还有更多。
-
在C++中和在C#中具有相同的树结构有什么好处?这真的取决于这一切的用途。通常(尤其是当您拥有双方,托管和非托管时),您将一种语言用于使用/场景,您不需要用两种语言来做/编码所有事情。
-
@wp78de 我不知道有什么明确的好处,我只是不知道在 c# 中扩展了 c++ 中的数据结构。我的理解是,字符串向量必须在托管代码和非托管代码之间手动传输。