草庐IT

private-constructor

全部标签

c++ - 隐藏私有(private)重载虚函数?

我有一个大致如下工作的类层次结构:classA{protected:virtualvoidf(int)=0;};classB{protected:virtualvoidf(char*)=0;};classDA:A{private:virtualvoidf(int)override{}};classDB:publicDA,B{private:virtualvoidf(char*)override{}};当我尝试使用clang(或gcc,就此而言)进行编译时,它会发出警告:22:18:warning:'DB::f'hidesoverloadedvirtualfunction[-Woverl

c++ - std::thread constructor 传递指针和传递ref有区别吗?

创建调用成员函数的线程时,传递当前类的指针和传递引用有区别吗?从下面的示例中,方法1的行为是否与方法2相同?有什么区别吗?classMyClass{public:MyClass(){};~MyClass(){};voidmemberFunction1(){//method1std::threadtheThread(&MyClass::memberFunction2,this,argumentToMemberFunction2)//method2std::threadtheThread(&MyClass::memberFunction2,std::ref(*this),argumentT

c++ - 当你是 friend 时,为什么 GCC 不允许从私有(private)嵌套类继承?

问同样的问题:为什么GCC允许从私有(private)嵌套类继承?对于非模板类,它允许从私有(private)嵌套类继承,如果它是一个friend,但不是模板类。是错误吗?templateclassInheritFromBaseMember:publicBase::MemberPrivate//error{usingPrivateMember=typenameBase::MemberPrivate;//worksfine};classMyBase{friendclassInheritFromBaseMember;//anothertrytodeclareitfriendtemplate

c++ - 使用指令、重载的私有(private)继承?

我在一个项目中使用私有(private)继承,在“根据”意义上实现。基类定义了operator[],这是我想要使用的功能。因此,我有classA:privateB{usingB::operator[];//...};但是,如何控制我得到的operator[]版本?事实上,我需要不止一个,包括const和非const版本。这能实现吗? 最佳答案 我的理解是您的using应该自动引入运算符的所有不同重载。您是否希望将某些重载排除在子类之外?在这种情况下,最好将工作拆分为父级中几个不同名称的函数,并且只使用您需要的函数。

c++ - Visual Studio 2015 中的 "default constructor cannot be referenced"

我在VisualStudio2015中遇到了一条非常奇怪的错误消息。以下精简代码:structA{A(intval=0):x(val){}intx=0;};structB:A{staticinty;};intB::y=1;structC:B{};intmain(){Cc;return0;}在Clang上编译没有任何问题。但是VisualStudio2015IntelliSense给出了以下错误消息:thedefaultconstructorof"C"cannotbereferenced--itisadeletedfunction我的代码中是否遗漏了什么,或者这是VisualStudio

c++ - Noexcept 对派生类构造函数的 promise : can that be used without promising noexcept on base constructor?

假设我有一个类classC:publicB{public:C()noexcept;}noexcept说明符是否需要基类的相同promise?也就是说,当我考虑使用noexcept时,我是只看C::C()的行为还是我还需要考虑B::B()是否可能抛出异常?例如,如果B::B抛出异常,它会传播到C::C还是传播到请求新类实例的代码?--如果传播到C::C,如果基类不是noexceptforconstructor,那将是避免noexceptforconstructor的原因之一。 最佳答案 技术上†不要求将基类构造函数声明为noexcep

c++ - 更正友元定义以授予 std::map 对私有(private)默认构造函数的访问权限

我正在开发一个使用结构的库,该结构不应具有该库用户可访问的默认构造函数。structExample{Example(intx);private:Example();};在库中,std::map需要默认构造函数来创建新条目。该库非常小心地在使用默认构造函数的任何地方实际放置值。库使用映射来存储这些结构,如下所示:std::mapdata;检查HEREFORACOMPLETEEXAMPLE在ideOne中。我想阻止库的用户使用默认构造函数。我如何与std::map、std::pair和/或std::tuple交friend以允许std::map使用此默认构造函数?friendclassst

c++ - 避免通过操作从私有(private)构造函数间接实例化

我正在尝试创建一个类,其对象必须包含对其值所代表的内容的简短描述(“名称”)。因此,唯一的公共(public)构造函数应该将字符串作为参数。但是,对于这些操作,我需要创建临时(无相关名称)对象来计算要分配给现有对象的值。为此,我已经实现了一个私有(private)构造函数,不应直接或间接地使用它来实例化一个新对象——这些临时对象应该只通过operator=分配给一个已经存在的对象,它只复制值而不是名称和值。问题来自于“auto”的使用。如果一个新变量声明如下:autonewObj=obj+obj;编译器推导出operator+的返回类型,直接赋值给newObj。这会导致对象具有不相关的

c++ - 隐藏 C++ 库的私有(private)成员

我写了一个库(不管它做什么),它显然有它的头文件。现在,我想隐藏那个头文件的私有(private)元素,所以如果我向某人提供我的库,他/她应该只能看到公共(public)成员(最好没有类定义,除了函数定义之外别无其他)。一种方法是创建C风格的头文件,它将包含某种“init”方法,用于创建实际库类的实例,用户必须将该对象的指针传递给每个函数做这份工作。这是一个好的做法吗?是否有任何其他公开接受的方式来做类似的事情?提前致谢。 最佳答案 除了工厂模式(在我看来,它可能变得笨拙),您还可以将您的私有(private)成员隐藏在PIMPL(

Maven打包项目报错:Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment

报错信息为:Unabletomakefieldprivatecom.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessorscom.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcsaccessible:modulejdk.compilerdoesnot"openscom.sun.tools.javac.processing"tounnamedmodule@73076bce报错原因:因为JDK版本太高与项目中使用的j