次のような C++ アンマネージ クラスがあるとします。
#include "note.h"
class chord
{
private:
note* _root; // or, as in my real class: std::shared_ptr<note> _root;
// _third, _fifth, _seventh, etc
public:
someClass(const note n1, const note n2, const note n3); // constructor takes some of these notes to make a chord
std::shared_ptr<note> root() const; // returns ptr to root of the chord
std::string name() const; // returns the name of this chord
}
これで、これらのクラスの両方を cli のマネージド クラスにラップする必要があることがわかりました。しかし問題は、ネイティブ クラスへのプライベート ポインターをコンストラクターに渡すにはどうすればよいかということです。
現状では、Note* _src は noteWrapper 内で非公開です。ただし、ネイティブ Chord() にはネイティブの Note オブジェクトが必要です。そのため、chordWrapper は noteWrappers _src にアクセスしてコンストラクターに渡すことができません。内部メンバーを .net に公開せずに、これを達成するにはどうすればよいですか?
編集**
// assume noteWrapper is already defined, with Note* _src as private
public ref class chordWrapper
{
private:
Chord* _src;
public:
chordWrapper(noteWrapper^ n1, noteWrapper^ n2, noteWrapper^ n3)
{
_src = new Chord(*n1->_src, *n2->_src, *n2->_src); // _src is inaccessible
}
}
chordWrapper はその内部メンバーにアクセスできないため、上記は不可能です。フレンドもサポートされていないため、内部メンバーを .net から非表示にし、cli クラスに公開するために他に何ができるかわかりません。
これを処理する適切な方法は何ですか?