jjzjj

c++ - 模板类的模板友元函数

我有以下模板类和模板函数,它们旨在访问类的私有(private)数据成员:#includetemplateclassMyVar{intx;};templatevoidprintVar(constMyVar&var){std::coutvoidscanVar(MyVar&var){std::cin>>var.x;}structFoo{};intmain(void){MyVara;scanVar(a);printVar(a);return0;}将这两个函数声明为MyVar的友元函数,我在templateclassMyVar的声明中尝试了以下方法宣告友元。它们都不起作用。我该怎么办?temp

c++ - 如何获取在 C++ 类主体中定义为友元的重载运算符的地址

如何获取类主体中定义为友元的重载运算符的地址?我尝试了以下方法structS{friendbooloperator==(S,S){returntrue;}};intmain(){bool(*f)(S,S)=&operator==;}但是gcc报错test.cc:Infunction‘intmain()’:test.cc:6:30:error:‘operator==’notdefinedbool(*f)(S,S)=&operator==;^这可以通过在(全局)命名空间中声明运算符来修复:booloperator==(S,S);有没有办法在不重新声明运算符的情况下获取地址?

c++ - Pimpl 习语和没有友元声明的内部对象协作

我正在使用pimpl惯用法实现几个类,并且遇到了一些设计问题。首先,我一直看到pimpl是这样做的classObject{public:Visible();~Visible();..etc..private:classObjectImpl*_pimpl;};我有几个使用这种方法的类,我的问题是其中几个类需要访问彼此的实现细节,但_pimpl指针是私有(private)的。谁能看到将_pimpl公开的缺点。显然,如果它是公开的,那么有人可能会不小心(或故意)重新分配它。(我忽略了一个事实,即“私有(private)”可以#defined为“公共(public)”并授予访问权限。如果您这样

c++ - 在 CPP 类中声明一个 C 函数作为友元

我需要在C函数中使用类的私有(private)变量。我正在做这样的事情classHelper{private:std::stringname;public:std::getName(){returnname;}friendextern"C"voidinitializeHelper();};但是这段代码给出了错误unqualified-idbeforestringconstant外部“C”{我无法确定我在这里做错了什么。 最佳答案 只需在你的课前转发声明这个函数:extern"C"voidfoo();然后你可以在friend声明中使用

c++ - 私有(private)内部类的友元函数

我有以下问题。我有一个带有私有(private)内部类的类。我现在想为内部类实现一个friend交换功能。但是我不知道如何制作非内联交换功能。如果我在内部类中定义它,一切正常。如果有人可以告诉我如何使其成为非内联的,我将不胜感激:)一些代码确实说明了问题:classOuter{classInner{intdata;friendswap(Inner&lhs,Inner&rhs)//whatisthesyntaxto{//makethisfunctionnoninline?usingstd::swap;swap(lhs.data,rhs.data);}}} 最佳

c++ - 是否可以将模板的所有实例化类声明为相互友元?

这个问题在这里已经有了答案:Howtodeclareatemplatedstruct/classasafriend?(1个回答)关闭6年前。假设我有一个模板(助手)类,我想让模板的所有实例化类成为友元(这样我就可以将一些静态成员函数隐藏为私有(private),即使它们偶尔会在内部切换模板参数)。像这样:templateclassFoo{templatefriendclassFoo;//...};但是,这不会编译,因为gcc警告我我正在专门化一些不允许的模板(必须出现在namespace范围内)。我不想专精任何东西......有什么办法吗?最初,由于有很多参数,我试图使用可变参数模板来

c++ - 在模板类中定义的友元函数

在模板类A中定义了一个名为test()的友元函数:templateclassA{public:friendvoidcs(){/*code*/}}另一个类继承自模板类A:classB:publicA{}在main函数中,我调用cs()失败,如果我不在全局范围内提供函数声明,编译器将看不到它的声明:intmain(){cs()}但是当cs将其模板类T作为参数时,情况就不同了:templateclassA{public:friendvoidcs(constT&t){}}现在可以在主函数中成功调用cs()而无需任何decalration:intmain(){Bb;cs(b);}如果函数将用户定

c++ - C++ 中的单一职责——我应该使用友元类还是更多访问器来实现它?

我希望遵循C++中的单一职责原则。然而,随着我的分类,似乎为了让类(class)能够“看到”彼此,我有以下选择:为每个类添加更多访问器让类(class)成为彼此的friend改进设计(也许我必须做1或2的事实表明我的设计存在缺陷)friend与访问者的问题之前可能已经讨论过,但我不知道在实现单一职责方面是否更有利。 最佳答案 我一直认为这条规则是废话。大多数类都有几个职责,并且没有造成伤害。考虑一个银行账户类——它可能有以下职责:维护客户详细信息允许借记和贷记交易提供当前余额向安全部门报告可疑交易当然,这些职责可能会使用帐户组成的其

c++ - c++调用基类的ostream友元函数

所以,我有两个类:classBase{private:intnumber;public:friendostream&operator我的问题是,如何从子类中调用基类的友元函数输出其内容:output提前致谢:) 最佳答案 output(n) 关于c++-c++调用基类的ostream友元函数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10367271/

c++ - 可以在 C++03 中有条件地声明友元类吗?

我只想在某些(编译时)条件为真时声明一个友元类。例如://pseudo-C++classFoo{if(some_compile_time_condition){friendclassBar;}};我在互联网上没有找到任何解决方案。我浏览了问题的所有答案GeneratingStructuresdynamicallyatcompiletime.他们中的许多人使用C++11std::conditional,但我想知道是否可以在C++03不使用预处理器的情况下执行此操作.此解决方案https://stackoverflow.com/a/11376710/252576将不起作用,因为friend