gpt4 book ai didi

c# - c++/cli 仅将内部成员公开给托管类

转载 作者:行者123 更新时间:2023-11-30 00:36:03 25 4
gpt4 key购买 nike

假设我有一个看起来像这样的 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 中的托管类中。但问题是,如何将指向 native 类的私有(private)指针传递给构造函数?

就目前而言,Note* _src 在 noteWrapper 中是私有(private)的。但 native Chord() 需要 native 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 无权访问该内部成员。由于也不支持 friend,我不知道还能做些什么来隐藏 .net 的内部成员,并将它们暴露给 cli 类。

处理这个问题的合适方法是什么?

最佳答案

内部成员与 C++/CLI 中的私有(private)成员在同一范围内。它与 C# 内部修饰符相同。恕我直言,我认为没有可见性修饰符的类/结构在默认情况下将被解释为内部?

public ref class noteWrapper
{
Note* _src;
}

在同一个范围内
public ref class noteWrapper
{
private:
Note* _src;
}

但是

public ref class noteWrapper
{
internal:
Note* _src;
}

是与 cli 库额外共享的私有(private)成员

关于c# - c++/cli 仅将内部成员公开给托管类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17247734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com