jjzjj

c++ - 将类模板声明为友元

出于某些原因,我想编写如下代码:templateclassC:publicT{friendclassT;};我认为代码很清楚。我想要一个类模板,它定义了一个从作为模板参数传递给它的类派生的类,为了让事情变得更复杂一点,我想将基类定义为派生类的友元。MSVC编译器的代码似乎没问题,但GNUC++编译器提示很多。我应该怎么做才能获得所需的功能? 最佳答案 它的格式不正确,并且不是有效的C++,尽管它可以在MSVC中运行。C++03标准这样说(7.1.5.3§2):3.4.4describeshownamelookupproceedsfo

c++ - 如何让好友功能有内部链接

我需要确保声明为某个C++类的友元的C++函数具有内部链接。我需要函数成为友元的原因是因为它需要访问那个类的私有(private)成员,一个缓存函数结果的私有(private)成员。函数需要是同一个类的非成员(或者至少不是实例成员)的原因是因为其他代码需要能够获取指向它的非成员函数指针。重构这个太昂贵了。我需要它有内部链接的原因是因为会有很多这样的函数,而在AIX上,它们太多会导致链接时出现TOC溢出错误。这可以使用-bbigtoc链接器开关来克服,但我目前正在努力避免这种情况。此外,我真的很希望能够将类声明保留在头文件中,但将函数本身放在包含实现的.cxx文件中。总而言之,现在我有这

c++ - 在类中定义主函数

这个问题在这里已经有了答案:inc++mainfunctionistheentrypointtoprogramhowicanchangeittoanotherfunction?(13个答案)关闭8年前。我想知道是否可以在一个类中定义main(),比如:structruntime_entry_point{friendintmain(){}};我已经测试过了,但它不起作用(几乎在GCC4.8.2中):g++-odist/Release/GNU-Linux-x86/turbobuild/Release/GNU-Linux-x86/main.o/usr/lib/gcc/x86_64-unkno

c++ - 具有自定义返回类型的全局命名空间中的友元函数

我想从全局命名空间创建一个类的友元函数,这似乎工作正常,除非友元函数使用像这样的自定义返回类型:typedefintType;TypemyFunction();namespacefoo{classFoo{public:friendType::myFunction();private:voidbar(){}};}TypemyFunction(){foo::Fooa;a.bar();return0;}如果使用int而不是Type代码会编译,但是使用typedef编译器似乎不会将类型与命名空间,并给出错误:error:expectedaclassornamespacefriendType::

c++ - 好友功能的可访问性

classC2;//ForwardDeclarationclassC1{intstatus;public:voidset_status(intstate);voidget_status(C2y);};classC2{intstatus;public:voidset_status(intstate);friendvoidC1::get_status(C2y);};//FunctionDefinitionsvoidC1::set_status(intstate){status=state;}voidC2::set_status(intstate){status=state;}voidC1:

c++ - T型的结构范围是什么?

我在wikipedia上找到了它:structuralscopeofT(whichcanbeusedtolocatefriendfunctions)谁能解释一下这是什么?Google帮不上什么忙。 最佳答案 因为它提到了友元查找,这种情况下的“结构范围”似乎是指类T的范围(当T是一个类时)或封闭的范围类(当T是在类中声明的成员类型时)。整个段落的措辞听起来很奇怪,因为C++语言没有正式地将类类型称为“结构类型”,也没有正式定义“结构范围”。最重要的是,它似乎将类作用域称为“命名空间”,这是不正确的。通过提到friend,它显然暗示了

c++ - 我对友元函数的理解

有时,非成员函数可能需要访问它作为参数接收的私有(private)成员。friend函数是一个非成员函数,它提供对其好友类的私有(private)访问。ClassX{intnumber;public:X&operator+=(constX&rhs);//a+=bisa.operator(b)friendint&operator+=(int&addthis,constX&rhs);//addthis+=bisIdon'tknowwhatlol}X&operator+=(constX&rhs){this->number=this->number+rhs.number;}int&operat

c++ - 嵌套类 C++ 中的友元

我试图理解嵌套类中友元的概念,但我没有正确理解这个概念。我已经编写了一个示例程序来理解它,但该程序无法运行#includeusingnamespacestd;classouterClass{private:inta;public:classinnerClass;boolprint(innerClass);};classinnerClass{friendclassouterClass;private:intb;public:innerClass()=default;};boolouterClass::print(outerClass::innerClassobj){cout我遇到以下错误

C++友情与继承

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。我知道友情是不能继承的。我问自己:为什么?为什么C++设计者决定不让友元被继承?你觉得拥有友元继承权有用吗?我自己的回答是肯定的:就像B是A的friend一样,我想让整个类(class)成为A(B及其衍生物)的friend。也许,应该可以说:让仅B成为A的友元,或者让B和它的派生类成为A的友元。附言。我不知道为什么你们中的许多人认为我要求自动延长友元。我

c++ - 通过继承C++成为 friend

假设我有两个类(class)Widget^|Window我还有另一个类应用程序:定义如下classApplication{public:...private:friendWidget;};这不会让Window访问Applicationsprotected和private成员。有没有一种方法可以在不将Window和任何后续“Widget”声明为Application的友元的情况下完成此操作? 最佳答案 不,这是不可能的。friendship不可继承。此外,friendship表示两个实体之间有意强耦合因此,如果您的设计确实需要如此强的