35得票5回答
为什么可以在类定义中放置友元函数定义?

朋友函数岂不应该显式地在类外定义吗? 如果是这样,那么为什么我可以像任何成员函数一样在类定义内声明朋友函数? 这是什么? 只适用于某些运算符(如 < 运算符),还是适用于所有运算符? 如果对所有运算符都适用,这样做有什么缺点吗? 应该避免使用吗?如果是,为什么?class person ...

32得票7回答
如何为派生类传递友元函数

我希望有一个类层次结构,并且只能在工厂内部创建它的对象。 例如: class Base { protected: Base(){}; virtual void Init(){}; friend class Factory; }; clas...

30得票3回答
我们能否增加这种基于密钥的访问保护模式的可重用性?

我们能否增加基于键的访问保护模式的可重用性: class SomeKey { friend class Foo; // more friends... ? SomeKey() {} // possibly non-copyable too }; clas...

30得票3回答
朋友和内联方法,有什么意义?

我在一个不是自己写的头文件中看到了以下内容:class MonitorObjectString: public MonitorObject { // some other declarations friend inline bool operator==(MonitorObjec...

30得票2回答
与模板模板参数交朋友

我有一个带有模板模板参数的类模板,我想将此参数(即其所有特化)声明为friend。但是我找不到正确的语法。 template <template <class> class T> struct Foo { template <class U> ...

29得票2回答
在C++中,是否可能将一个未命名的命名空间中的类作为友元类?

我正在将Java代码移植到C++,我想复制一些匿名功能。 在A.h文件中,我有以下内容: class A { private: int a; class AnonClass; friend class AnonClass; }; 在A.cpp文件中,我有以下内容: na...

28得票3回答
为什么无法在类中引用前向声明的友元类?

以下代码无法编译: struct X { friend class Y; Y* ptr; }; cppreference描述了以下情况: ...如果在friend声明中使用的类名尚未声明,则会立即进行前向声明。 如果“立即”指的是声明友元关系的地方,那么声明成员Y* pt...

27得票2回答
不同命名空间中的友元类。这是否可能?

我在尝试使用C++的友元特性时遇到了问题。我有以下这些接口:#pragma once #include "Mesh3D.h" #include <string> namespace tools{ namespace sysInput{ class CGeom...

27得票5回答
当应该使用友元运算符==或<<时?

我感觉我对于 friend 关键字的理解还有一些遗漏。 我有一个类叫做 presentation,我在代码中用它来定义两个变量,present1 和 present2,然后我通过 == 进行比较:if(present1==present2) 这是我如何定义 == 运算符(在 presenta...

26得票2回答
在C++中,为什么不可能使用另一个类的模板类型来为模板类成员函数添加友元?

换句话说,为什么这段代码能够成功编译: template&lt;typename Type&gt; class A{ public: void f(); }; class B{ friend void A&lt;int&gt;::f(); }; template&lt;&...