草庐IT

Private_dirty

全部标签

c++ - 私有(private)继承的 typedef 对嵌套类的可见性

在下面的示例中(对长度表示歉意)我试图隔离一些我在从另一个私有(private)继承的类中使用嵌套类时遇到的意外行为。我经常看到这样的陈述:与非嵌套类相比,嵌套类没有什么特别之处,但在这个例子中,可以看到嵌套类(至少根据GCC4.4)可以看到一个公共(public)类型定义由关闭类私有(private)继承的类。我明白typdef与成员数据不同,但我发现这种行为令人惊讶,而且我想很多其他人也会这样。所以我的问题是双重的:这是标准行为吗?(对原因的合理解释会很有帮助)能否期望它适用于大多数现代编译器(即它的可移植性如何)?#includeclassBase{typedefintpriv_

c++ - "Member is private"虽然我不从外部访问它,但在使用尾随返回类型时

如何解决以下问题?我正在编写一些函数库,它定义了以下与这个问题相关的函数:call(f,arg):调用带有参数的函数。只是我在某些情况下需要的包装器。comp(f1,f2):返回两个函数的组合。返回表示两个函数组合的辅助仿函数。实现如下所示(简化版本仍能说明问题)://Callfwithoneargumenttemplateautocall(constFn&f,constArg&arg)->decltype(f(arg)){returnf(arg);}//HelperfunctorforthefunctionbelowtemplateclassCompFn{Fn1a;Fn2b;publ

C++:私有(private)嵌套类类型的公共(public)成员

我有以下代码:classBase{private:classNestedBase{public:voidDo(){}};public:NestedBasenested;};intmain(){Baseb;b.nested.Do();//lineAcompilesBase::NestedBaseinstance;//lineBdoesn'tcompile}NestedBase类是Base的私有(private)嵌套类,因此B行不编译似乎很自然。但是,另一方面,变量b有公共(public)成员nested,我可以从外部调用它的方法Do()>Base(如A行)。在这种情况下,规范对私有(pr

c++ - 为什么 COM DLL 导出应标记为 "PRIVATE"?

在构建COMDLL时,为什么要导出DllGetClassObject、DllCanUnloadNow、DllRegisterServer、DllUnregisterServer等。在关联的.DEF文件的EXPORTS部分中标记为PRIVATE? 最佳答案 当您构建一个DLL时,链接器会自动为该DLL创建一个导入库。它包含所有导出函数的列表。您在另一个使用DLL的项目中使用该导入库。特定于COM服务器的是,这4个导出函数总是通过GetProcAddress()找到,并且您永远不会隐式依赖于COMdll。您始终使用CoCreateIns

c++ - 具有私有(private)构造函数和自身静态数组的类

抱歉,如果标题令人困惑,我找不到简单的方法来用简单的句子来写它。无论如何,我面临的问题://header:classSomeThing{private:SomeThing(){}//lookup_table_0;staticSomeThinglookup_table_1[64];};getThatThing函数旨在从查找表中返回一个实例。//intheimplementationfile-definitionsoflookuptablesstd::arraySomeThing::lookup_table_0;//errorSomeThingSomething::lookup_table

c++ - C++中 protected 和私有(private)派生之间的区别是什么

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Differencebetweenprivate,publicandprotectedinheritanceinC++在C++中派生为protected或private有什么区别?我想不通,因为两者似乎都限制从派生类对象访问基类成员

c++ - 如何让一个方法访问其他模板类实例的私有(private)成员?

这个极小的示例将无法编译,因为A无法访问私有(private)成员i在AtemplateclassA{inti;public:templatevoidcopy_i_from(constA&a){i=a.i;}};intmain(void){Aai;Aad;ai.copy_i_from(ad);return0;}我知道我可以让所有模板实例成为彼此的friend(参见:Howtoaccessprivatemembersofothertemplateclassinstances?),但由于我只有一种方法需要访问权限(如示例中所示),我希望将友元限制为那个方法。这可能吗?

c++ - 私有(private)复制构造函数/赋值运算符和复制初始化

这是thisquestion的后续在下面的代码中,为什么第1行可以编译而第2行和第3行没有编译(使用VisualC++2010)classABase{protected:ABase(){}~ABase(){}private:ABase(constABase&);constABase&operator=(constABase&);};classA:ABase{};classB{public:B(){}~B(){}private:B(constB&);constB&operator=(constB&);};intmain(void){Aa=A();//line1Aa2(a);//line2

c++ - 在没有 friend 的情况下授予对私有(private)构造函数的访问权限?

我正在写一些代码,我遇到了类似的情况:structBar;structFoo{friendstructBar;private:Foo(){}voidf(){}voidg(){}};structBar{Foo*f;Bar(){f=newFoo();}~Bar(){deletef;}};intmain(){Barb;}我宁愿Bar不是Foo的friend,因为除了Foo的构造函数Bar不需要访问任何Foo的私有(private)方法(因此不应该访问)。有没有办法只允许Bar创建Foo而不让它们成为friend?PS:意识到问题可能不是100%清楚。我不介意是否通过friend,只是所有Ba

c++ - 为什么 C++ 禁止 final 类的私有(private)继承?

C++11向C++引入了final关键字。它可以用于虚方法或类。将类声明为final禁止任何类型的继承:公共(public)的、protected和私有(private)的。structAfinal{};classB:privateA{};error:base'A'^ismarked'final'虽然禁止公共(public)继承是合理的(例如,如果我的类没有虚拟析构函数,或出于其他原因),但我为什么要禁止私有(private)继承?如果final禁止仅公共(public)继承,那么std::string和它在std中的其他friend可能是final--他们应该--因为没有虚拟析构函数