gpt4 book ai didi

.net - friend 引用课?

转载 作者:行者123 更新时间:2023-12-04 19:10:07 25 4
gpt4 key购买 nike

我有一个托管类Parser和一个非托管类 CParser .前者从托管客户端(C# 世界)的 DLL 中公开。核心功能在非托管类中 CParser .由于两者都在同一个DLL中,并且是一对一的关系,托管类可以访问非托管类。

问题是我想要 Parser访问 CParser 的所有成员.我不想使用 public:对于所有成员,我也不愿意有setter和getter。因此,我只是放置了 friend关键词:

class CParser
{
...
friend ref class Parser; // C2144
};

// public ref class Parser{};

我收到错误 C2144 ,可能是因为非托管 C++ 无法理解 ref关键词。如果我删除 ref关键字,托管编译器(编译 Parser),会报错 C2872: Ambigious Symbol。

还知道 internal:不适用于未管理的 C++。

制作方法 Parser CParser 的 friend ?

编辑:
这个问题已经是 here , 但可能非托管类在 /clr 下编译.我不能/不会使用托管编译器编译非托管类。

最佳答案

您不能使用 friend在这种情况下。我发现完成它的唯一方法是声明另一个 friend ,它可以自由访问私有(private)成员,但在另一个类的源文件中定义,因此不能被任何其他代码使用。

这本身就是丑陋的,但至少丑陋隐藏在 cpp 文件中,并且原生类的公共(public)接口(interface)保持相对干净。

NativeClass.h

class NativeClass
{
public:
void PublicStuff();
struct DispatchHelper;
protected:
friend DispatchHelper;
void NonPublicStuff();
};

引用类.h
ref class RefClass
{
public:
void ManagedCode();
};

引用类.cpp
struct NativeClass::DispatchHelper
{
static void DoStuff(NativeClass* p) { p->NonPublicStuff(); }
}

void RefClass::ManagedCode()
{
NativeClass::DispatchHelper::DoStuff(pNativeClass);
}

关于.net - friend 引用课?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15756547/

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