70得票1回答
如何将一个模板化的struct/class声明为友元?

我希望做以下事情: template <typename T> struct foo { template <typename S> friend struct foo<S>; private: // ... }; 但是我的编...

69得票4回答
函数多重定义错误

我曾经学过一门C++入门课程,现在我想重新学习C++,但是我遇到了一些基本的问题。我当前的问题出现在尝试使用友元函数时。以下是我的两个文件中的代码。 第一个文件:// fun.cpp #include <iostream> using namespace std; class...

61得票5回答
友元声明是声明一个非模板函数。

我有一个类似下面代码的基类。我尝试重载 << 以便在 cout 中使用。 然而,g++ 报错:base.h:24: warning: friend declaration ‘std::ostream& operator<<(std::ostream&, ...

60得票6回答
C++中的clean granular friend等效是什么?(答案:律师-客户端语法)

为什么C++中有一些public成员可以被任何人调用,而friend声明可以将所有private成员暴露给指定的外部类或方法,但没有语法可以将特定成员暴露给指定的调用者? 我想表达的是,希望通过一些例程来表示只能由已知调用者调用,而不必让这些调用者完全访问所有私有成员,这似乎是一个合理的需求...

58得票4回答
如何让Google Test类与我的类成为好友?

我听说有可能将 Google Test 的 TestCase 类设置为我的类的友元,从而使测试能够访问我的私有/保护成员。 如何实现这一点呢?

57得票3回答
为什么C++友元类只需要在其他命名空间中进行前向声明?

假设我有一个名为 F 的类,它应该是类 G(在全局命名空间)和类 C(在命名空间 A 中)的友元。 要成为 A::C 的友元,必须提前声明 F。 要成为 G 的友元,不需要提前声明 F。 同样,类 A::BF 可以成为 A::C 的友元而无需提前声明。 下面的代码说明了这一点,并使用 ...

56得票4回答
这种基于密钥的访问保护模式是一个已知的习惯用语吗?

Matthieu M.在这个答案中提出了一种访问保护模式,我以前见过,但从未有意识地考虑过这种模式:class SomeKey { friend class Foo; SomeKey() {} // possibly make it non-copyable too...

54得票5回答
有没有办法从另一个包中访问结构体的私有字段?

我有一个在一个包中的结构体,它有私有字段:package foo type Foo struct { x int y *Foo } 还有另一个包(例如,白盒测试包)需要访问它们:package bar import "../foo" func change_foo(f *...

53得票4回答
C++中的友元继承?

子类会继承主类的友元关系(包括主类自身的友元关系以及与主类有友好关系的其他类)吗? 换句话说,继承如何适用于友元关键字? 进一步解释一下: 如果不行,是否有办法继承友元关系? 我遵循Jon的建议发布了设计问题: C++类设计问题

49得票3回答
使一个模板参数成为友元?

例子: template<class T> class Base { public: Base(); friend class T; }; 现在这个不起作用...有没有办法做到这一点? 我实际上正在尝试创建一个类似于这样的通用类密封器: class Cla...