Windows runtime 如何在C++/CX中使用friend类?

Windows runtime 如何在C++/CX中使用friend类?,windows-runtime,c++-cx,Windows Runtime,C++ Cx,我需要在类B的函数中访问类A的私有成员,我想使用friend类。但是,它似乎不能作为C++的方式使用。 错误C3816类Class2先前已用其他WinRT修饰符声明或定义 我怎样才能解决它? 注意:我不能在公共区域编写get/set函数,因为我不想让类用户知道私有成员记住为什么你要声明一个C++ /CX REF类,它允许用另一种语言编写的程序使用C++代码。这样的语言不会有任何朋友关键词的概念,它对C++语言有很强的特殊性。只有C++编译器才能够执行朋友契约。事实上,如果客户机代码是用C编写的,

我需要在类B的函数中访问类A的私有成员,我想使用friend类。但是,它似乎不能作为C++的方式使用。 错误C3816类Class2先前已用其他WinRT修饰符声明或定义

我怎样才能解决它? 注意:我不能在公共区域编写get/set函数,因为我不想让类用户知道私有成员 首先检查以确保您正确地使用了C++/CX,仅当您确实打算使该类可供其他语言访问时才使用ref class关键字。使用一个常规C++类,纯类没有REF上下文关键字,如果类只会被自己的代码使用。如果它真正打算用作互操作类,那么除了让成员公开,你就没有别的选择了。

< P>记住为什么你要声明一个C++ /CX REF类,它允许用另一种语言编写的程序使用C++代码。这样的语言不会有任何朋友关键词的概念,它对C++语言有很强的特殊性。只有C++编译器才能够执行朋友契约。事实上,如果客户机代码是用C编写的,CLR会强制执行可访问性,那么它就根本不起作用。因此,项目生成的.winmd文件的元数据格式根本不支持表示朋友的概念。因此,编译器也不会


首先检查以确保您正确地使用了C++/CX,仅当您确实打算使该类可供其他语言访问时才使用ref class关键字。使用一个常规C++类,纯类没有REF上下文关键字,如果类只会被自己的代码使用。如果它真的打算用作互操作类,那么您将没有其他选择,只能使成员公开。

< P>访问规范是预防意外访问的,因此STD C++和STL性能与特定的CX CARS朋友——例如,持有XAML绑定DATACONTEX容器——是直接的方法。无论出于何种原因,VC++都是种族主义者。RTWinRT ABI通过OOP进行混合。一个已知的替代方案是切换到生成元编程而不是OO。为此,将模板成员函数保留在希望与使用者成为朋友的类中,并在使用者的范围内对此进行专门化,然后在使用者内使用专门化版本。这是一种隐藏于微软家族友情中的行为。

< P>访问规范是预防意外访问的预防措施,因此STD C++和STL性能与特定的CX CARS朋友——比如说持有XAML绑定数据绑定容器——是一种简单的方法。无论出于何种原因,VC++都是种族主义者。RTWinRT ABI通过OOP进行混合。一个已知的替代方案是切换到生成元编程而不是OO。为此,将模板成员函数保留在希望与使用者成为朋友的类中,并在使用者的范围内对此进行专门化,然后在使用者内使用专门化版本。它有点隐藏在微软的家庭友谊事件中。

你可以使用

friend ref class Class2;
而不是

friend class Class2

您可以使用

friend ref class Class2;
而不是

friend class Class2

我用Windows运行时组件项目来封装C++编写的用于C UI项目的SDK接口,调用Windows存储,所以我需要C++ +CX来完成这项工作。现在我知道朋友不能用在C++中,我尝试用MAP来保持关系,直到现在为止。谢谢您的回答。@汉青朋友可以用在C++ + CX中,不在RF类中。我构建Windows运行时组件项目来封装我的SDK接口,用C++编写的C++ UI项目调用Windows存储,所以我需要C++ +CX来完成这项工作。现在我知道朋友不能用在C++/CX中,我曾试图用map来维持这段关系,到目前为止似乎一直有效。谢谢您的回答。@Hanqing friend可以在C++/CX中使用,但不能在ref类中使用。