草庐IT

public_private

全部标签

c++ - 来自私有(private) CRTP 基地的回调

以下代码不起作用,因为您不能从私有(private)基类static_cast。用C风格的转换来替换转换是可行的(尽管我最初认为这会调用未定义的行为,但显然它不会,请参阅thisanswer),但是相当丑陋,因为它还允许您绕过常量检查等.另一种方法是使CRTPBase成为友元,但这会暴露所有Derived的私有(private)成员。是否有另一种不使用C风格转换也不使CRTPBase成为友元的编写方式?templatestructCRTPBase{voidcallBase(){T*derived=static_cast(this);derived->publicMethod();}};

c++ - 绑定(bind)到私有(private)继承的成员函数

我想将std::bind到私有(private)基类的成员函数,在派生类中使用using声明使其“公开”。直接调用函数是可行的,但绑定(bind)或使用成员函数指针似乎无法编译:#includestructBase{voidfoo(){}};structDerived:privateBase{usingBase::foo;};intmain(int,char**){Derivedd;//callmemberfunctiondirectly://compilesfined.foo();//callfunctionobjectboundtomemberfunction://nomatchi

c++ - const public 成员有什么问题?

我正在阅读一些代码,其中一个类具有私有(private)const数据成员,然后是一大堆提供对这些数据成员的只读访问的公共(public)方法。这有什么意义呢?为什么不直接公开这些私有(private)数据成员呢?它们是常量,因此根据定义访问是只读的,人们可以通过theClass.theMember而不是theClass.getTheMember()访问它们,后者更容易,另外您可以避免首先创建所有这些公共(public)方法。每个成员变量一个,这意味着O(n)效率低下! 最佳答案 除非访问器方法除了提供引用之外实际上还做了一些事情,

c++ - 访问公共(public)继承模板数据成员

这个问题在这里已经有了答案:WhydoIhavetoaccesstemplatebaseclassmembersthroughthethispointer?(3个答案)关闭2年前。我需要澄清为什么我们需要范围解析运算符或this指针来访问从模板基类公开继承的成员的问题。据我了解,这是为了增加清晰度,但是this除了指出它是该类的成员之外,如何进一步增加清晰度。为了让我的问题更清楚,我添加了一些代码。#includeusingnamespacestd;templateclassmypair{public:Ta,b;public:mypair(Tfirst,Tsecond){a=first

c++ - 公共(public)基类的派生类的 TypeID

我正试图在C++中实现某种机制,从而为从公共(public)基类派生的所有类分配一个唯一的“类ID”。例如:classBaseClass{//...public:unsignedintGetID(void);//...};classDerivedClass:publicBaseClass{}DerivedClass类和BaseClass的所有其他子类应该能够返回唯一标识符,而无需向DerivedClass添加任何额外代码……然而,C++使这对我来说相当困难。任何想法将不胜感激。提前致谢!---丹 最佳答案 你应该听听Alf的话:)这

C++ API 设计 : Clearing up public interface

对于我的库,我想公开一个干净的公共(public)API,它不会分散实现细节的注意力。但是,正如您所了解的那样,这些细节甚至会泄露到公共(public)领域:一些类具有有效的公共(public)方法,可供库的其余部分使用,但对API的用户来说不是很有用,因此不要不需要成为其中的一部分。公共(public)代码的简化示例:classCookie;classCookieJar{public:CookiegetCookie();}classCookieMonster{public:voidfeed(CookieJarcookieJar){while(isHungry()){cookieJar

c++ - 有没有办法拥有一个公共(public)成员,从类外部不可修改,没有访问器包装函数?

据我所知,这似乎不可能以直接的方式进行。使成员const使它对每个人都是const。我想要一个只读属性,但想避免使用典型的“getter”。我想要constpublic,mutableprivate。这在C++中完全可行吗?目前我能想到的只是一些模板和friend的诡计。我现在正在调查这个。这似乎是一个愚蠢的问题,但我之前对这里的答案感到惊讶。 最佳答案 一个可能的解决方案可以基于一个内部类,外部类是它的友元,如下所示:structS{templateclassProp{friendstructS;Tt;voidoperator=(

c++ - C++ 头文件的 emacs 公共(public)/ protected /私有(private)标签缩进不适用于零偏移

即使我在我的.emacs文件中定义了一些东西,我也无法在emacs中为我的C++头文件获得零偏移量。下面的头文件显示了两个命名空间内的类定义,最重要的是我希望具有零偏移量的public关键字,如下所示。namespacen1{namespacen2//nooffset{classSomeClass//nooffsetfromnamespaceopencurly{public://thislinewithzerooffsetSomeClass();//offset4...};inlineSomeClass::SomeClass()//nooffset{}}//n2}//n2在我的.ema

c++ - 命名空间中的私有(private)类

我在头文件的命名空间中有一个类。该类需要一个模板类型,而我只希望使用某些类型。下面显示了一个示例。文件a.hpp//a.hppnamespacea_ns{templateclassa{//stuff};typedefaa_double;}//endofnamespace//stuff文件b.hpp//b.hpp#includenamespaceb_ns{typedefa_ns::a_doubleb;}文件main.cpp//main.cpp#include"b.hpp"intmain(){b_ns::bmy_b;//my_a_which_is_not_allowed;//因此,正如您从

c++如何为同一成员创建公共(public)和 protected 访问器

如果我有两种方法-一种是公共(public)的,一种是protected返回对同一成员的引用,我会得到以下编译错误:'Server::getManager':cannotaccessprotectedmemberdeclaredinclass'Server'当我注释掉protected函数时,代码可以正常工作。你能告诉我为什么会这样吗?为什么编译器找不到相同成员的公共(public)函数?classManager{};classServer{public:constManager&getManager()const{returnm_man;}protected:Manager&getM