草庐IT

private-messaging

全部标签

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++11 static_assert : Parameterized error messages

在mypreviousquestion我想使用static_assert将模板参数限制为特定的子类型。问题回答完毕,归档代码如下:templatestructX{static_assert(std::is_base_of::value,"TmustbederivedfromY!");};现在,我想让错误信息更简洁。即,我想说明哪种类型违反了此约束。例如,如果类A不是来自Y有人实例化了X,则错误消息应打印“类型参数必须从Y派生,但A不是”。这是否可以通过标准库以某种方式实现?我看到两个挑战:在编译时不使用boost::mpl组装字符串检索实例化T的类型的名称。该名称应该有意义,最好与违规

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--他们应该--因为没有虚拟析构函数

c++ - 为什么我不能从不同 namespace 中的友元类更改类的私有(private)成员?

我发现从好友类访问类的私有(private)成员时遇到问题。持有我要更改的私有(private)成员的类和进行更改的类在不同的命名空间中。friend类是在保存数据的类之后定义的,所以我尝试在命名空间外转发声明friend类。g++说我不能修改成员,因为它是私有(private)的,visualstudio好像觉得没问题。我是不是在做一些奇怪的非标准事情?为什么我不能更改成员?这是一个代表我的问题的简化片段:structS;namespaceN{classA{intm;public:A():m(5){};friendstructS;};}usingnamespaceN;structS{