私は、C++で複雑な文字列を解析し、そこからツリーを作成するコードを書いています。 Visual Studio 2017でC#を使用して、ノードのベクトルを返すネイティブなC++メソッドを呼びたいと思います。構造をCに渡す
Aノードは、次のようになります。
class node
{
public:
std::vector<node> subnodes;
std::string name;
};
とC++関数は次のようになります。noderizer::getNodes(...)
を呼び出す(スピードのための二次的考慮して時間をコーディング)は、最も効率的な方法は何か
class noderizer
{
public:
node getNodes(std::string str);
};
メンバーと同等のクラスを作成するC#?
私は最善のルートがC#で重複したクラス定義を作成することであると仮定して、this articleは、Cの最新情報が含まれている場合、それははっきりしていない管理Strings
「
public class node
{
public string name = string.Empty;
List<node> integers = new List<node>();
}
にネイティブstd::strings
をマーシャリングコピー++相互運用していますしかし、C#で使用するwrapping c++ native classesに関する関連記事は、noderizer
ネイティブC++をnoderizer * m_Impl;
とし、getNodes
のメンバーに電話し、各パラメータをコピーすることが最も可能性が高いことを示しています。
はい、マネージC++を使用したり、COMを介してC++メソッドを公開したりすることができます。 – wp78de
C#で*と*のツリー構造を同じにする利点は何ですか?それは本当にこのすべての使用法が何であるかにかかっています。通常は(特に、管理されているものと管理されていないものの両方を所有している場合)、使用法/シナリオに言語を捧げるので、両方の言語ですべてを行う/コードする必要はありません。 –
@ wp78de明示的なメリットがないことはわかりませんが、C++のデータ構造をどのように拡張するのか分かりません。私の理解は、管理されたコードとアンマネージコードの間で文字列ベクトルを手動で転送する必要があるということです。 – Steve