草庐IT

private-inheritance

全部标签

c++ - 使用 mpl::inherit_linearly 定义接口(interface)的含义

我正在编写一些消息处理代码,其中每条消息都是一个POD结构。在写作方式上,这将是定义一个抽象基类,为每种消息类型使用虚拟函数,例如:classAbstractHandler{public:virtualvoidhandleMessage(constMessageType1&msg)=0;virtualvoidhandleMessage(constMessageType2&msg)=0;virtualvoidhandleMessage(constMessageType3&msg)=0;virtualvoidhandleMessage(constMessageType4&msg)=0;};

c++ - 静态对象的私有(private)析构函数是如何调用的?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Cannotaccessprivatememberinsingletonclassdestructor我正在实现一个单例,如下所示。classA{public:staticA&instance();private:A(void){cout析构函数是私有(private)的。当程序即将终止时,是否会为对象theMainInstance调用它?我在VisualStudio6中试过,它给出了编译错误。"cannotaccessprivatememberdeclaredinclass..."在visualstudio

c++ - std::is_default_constructible<T> 错误,如果构造函数是私有(private)的

我有以下片段#include#includeclassC{C(){}};intmain(){static_assert(!boost::has_trivial_default_constructor::value,"Constructible");static_assert(!std::is_default_constructible::value,"Constructible");}条件不相等,但第一个条件工作正常,第二个构造给出错误,构造函数是私有(private)的。编译器gcc4.7...那么,这是gcc错误,还是由标准定义的?http://liveworkspace.org/

c++ - 如何访问单独类中的私有(private)构造函数?

我正在用C++编写一个库。我的图书馆有两个类(class),A和B.我想隐藏A()引用我的库的任何代码的构造函数。我也要上课B能够调用A()构造函数。我有C#背景,对我的C++内存犹新。在C#中,我将简单地声明A()构造函数为internal.我读过在C++中执行此操作的最接近方法是friend的组合声明和前向声明。我该怎么做呢?下面是我的三个文件:嗯:#pragmaonceclassA{private:A();};B.h#pragmaonceclassA;classB{public:AcreateA();};B.cpp:#include"A.h"#include"B.h"AB::cr

c++ - shared_ptr 和私有(private)继承

这是一个说明我遇到的问题的玩具示例。该应用程序是相当无关紧要的(它本质上是一个链表元素,最后具有特殊行为)。我无法使用派生指针构造基类shared_ptr并且由于某种原因与我使用私有(private)继承的事实相关联。#include#include#includeusingnamespacestd;//AnIteminalinkedlistclassA{public://friendclassB;typedefboost::shared_ptrAPtr;A():next_(){}A(APtrn):next_(n){}APtrnext(){returnnext_;}voidsetNex

c++ - 如何在 C++ 中定义另一个类的私有(private)类

是否可以在另一个类中定义一个类私有(private)并将其用于数组?例如:classa{public:private:classb;bmyarray[10];classb{public:b(inta):a_val(a){}private:inta_val;};};忽略公共(public),我的语法有什么问题吗?是否也可以在A中创建一个成员函数来修改b的私有(private)值。例如,myarray[0].a_val=5;如果是这样,这个语法是否也正确? 最佳答案 不,您定义私有(private)嵌套类的语法没问题。尽管其他一些事情是

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

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

c++ - 避免模​​拟 std::fstream 类的 "inheritance by dominance"警告

我正在使用googlemock在我的单元测试中模拟一个std::fstream对象,像这样:TEST_F(SomeTest,SomethingIsDoneCorrectly){classMockFstream:publicstd::fstream{};MockFstreamlMockFstream;//Expectationsandassertionshere}当我编译时,我收到以下警告:Warning1warningC4250:'SomeTest_SomethingIsDoneCorrectly_Test::TestBody::MockFstream':inherits'std::b

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