草庐IT

FHE-friendly

全部标签

c++ - 允许 "friend"类仅访问一些私有(private)成员

假设我有三个C++类FooA、FooB和FooC。FooA有一个名为Hello的成员函数,我想在FooB类中调用该函数,但我不希望FooC类能够调用它。我能想出实现这一点的最好方法是将FooB声明为FooA的friend类。但只要我这样做,所有FooA的私有(private)成员和protected成员都会暴露出来,这对我来说是非常NotAcceptable。所以,我想知道C++(03或11)中是否有比friend类更好的机制来解决这个难题。如果可以使用以下语法,我认为会很好:classFooA{privatefriendclassFooB:voidHello();voidHello2

c++ - 允许 "friend"类仅访问一些私有(private)成员

假设我有三个C++类FooA、FooB和FooC。FooA有一个名为Hello的成员函数,我想在FooB类中调用该函数,但我不希望FooC类能够调用它。我能想出实现这一点的最好方法是将FooB声明为FooA的friend类。但只要我这样做,所有FooA的私有(private)成员和protected成员都会暴露出来,这对我来说是非常NotAcceptable。所以,我想知道C++(03或11)中是否有比friend类更好的机制来解决这个难题。如果可以使用以下语法,我认为会很好:classFooA{privatefriendclassFooB:voidHello();voidHello2

c++ - 如何让我的类(class)成为 google-test 类(class)的 friend ?

我听说有可能让google-testTestCase类friend加入我的类,从而使测试能够访问我的私有(private)/protected成员。如何做到这一点? 最佳答案 试试这个(直接来自Google测试文档...):FRIEND_TEST(TestCaseName,TestName);例如://foo.h#include//DefinesFRIEND_TEST.classFoo{...private:FRIEND_TEST(FooTest,BarReturnsZeroOnNull);intBar(void*x);};//fo

c++ - 如何让我的类(class)成为 google-test 类(class)的 friend ?

我听说有可能让google-testTestCase类friend加入我的类,从而使测试能够访问我的私有(private)/protected成员。如何做到这一点? 最佳答案 试试这个(直接来自Google测试文档...):FRIEND_TEST(TestCaseName,TestName);例如://foo.h#include//DefinesFRIEND_TEST.classFoo{...private:FRIEND_TEST(FooTest,BarReturnsZeroOnNull);intBar(void*x);};//fo

c++ - Effective C++ Item 23 Prefer non-member non-friend functions to member functions

在对类设计的一些事实感到困惑时,特别是函数是否应该是成员,我查看了Effectivec++并找到了第23条,即Prefernon-membernon-friendfunctionstomemberfunctions。使用Web浏览器示例第一手阅读该内容是有一定道理的,但是该示例中的便利函数(在书中像这样命名非成员函数)会改变类的状态,不是吗?那么,第一个问题,他们不应该是成员(member)吗?进一步阅读,他考虑了STL函数,实际上某些类没有实现的一些函数是在STL中实现的。按照本书的思路,它们演变成一些方便的函数,这些函数被打包到一些合理的命名空间中,例如std::sort、std:

c++ - Effective C++ Item 23 Prefer non-member non-friend functions to member functions

在对类设计的一些事实感到困惑时,特别是函数是否应该是成员,我查看了Effectivec++并找到了第23条,即Prefernon-membernon-friendfunctionstomemberfunctions。使用Web浏览器示例第一手阅读该内容是有一定道理的,但是该示例中的便利函数(在书中像这样命名非成员函数)会改变类的状态,不是吗?那么,第一个问题,他们不应该是成员(member)吗?进一步阅读,他考虑了STL函数,实际上某些类没有实现的一些函数是在STL中实现的。按照本书的思路,它们演变成一些方便的函数,这些函数被打包到一些合理的命名空间中,例如std::sort、std:

c++ - 让模板参数成为 friend ?

例子:templateclassBase{public:Base();friendclassT;};现在这不起作用...有没有办法做到这一点?我实际上是在尝试制作这样的通用类密封器:classClassSealer{private:friendclassSealed;ClassSealer(){}};classSealed:privatevirtualClassSealer{//...};classFailsToDerive:publicSealed{//Cannotbeinstantiated};我在这个网站的某个地方找到了这个例子,但我找不到它......(here)我知道有oth

c++ - 让模板参数成为 friend ?

例子:templateclassBase{public:Base();friendclassT;};现在这不起作用...有没有办法做到这一点?我实际上是在尝试制作这样的通用类密封器:classClassSealer{private:friendclassSealed;ClassSealer(){}};classSealed:privatevirtualClassSealer{//...};classFailsToDerive:publicSealed{//Cannotbeinstantiated};我在这个网站的某个地方找到了这个例子,但我找不到它......(here)我知道有oth

c++ - 访问类中定义的 friend 功能

有这样的代码:#includeclassA{public:friendvoidfun(Aa){std::cout如何访问函数fun2()? 最佳答案 classA{public:friendvoidfun(Aa){std::cout虽然您对fun2的定义确实定义了一个“全局”函数而不是一个成员,并使其成为的friendA同时,您仍然缺少在全局范围内的同一函数的声明。这意味着该范围内的任何代码都不知道fun2存在。fun也会出现同样的问题,只是Argument-DependentLookup可以接管并找到函数,因为有一个A类型的参数。

c++ - 访问类中定义的 friend 功能

有这样的代码:#includeclassA{public:friendvoidfun(Aa){std::cout如何访问函数fun2()? 最佳答案 classA{public:friendvoidfun(Aa){std::cout虽然您对fun2的定义确实定义了一个“全局”函数而不是一个成员,并使其成为的friendA同时,您仍然缺少在全局范围内的同一函数的声明。这意味着该范围内的任何代码都不知道fun2存在。fun也会出现同样的问题,只是Argument-DependentLookup可以接管并找到函数,因为有一个A类型的参数。