草庐IT

Private_dirty

全部标签

c++ - 模板元代码和私有(private)成员

我想做这样的事情:templateclassFoo{...public:voidDoSomething(){compile_time_if(TisClassA){m_T.DoThingOne();m_T.DoThingTwo();}DoSomeFooPrivateThing();m_T.DoThingThree();}Tm_T;};在这种情况下,我知道所有有效的T都实现了DoThingThree,但只有ClassA实现了DoThingOne和DoThingTwo。这不是鸭子打字的事情,我只想为ClassA做这个额外的部分,我不想将这些方法添加到其他可能的T。我无法进行转换,因为可能的T

c++ - 可以通过在基类中声明复制构造函数/运算符私有(private)来使派生类不可复制吗?

我认为理论上这个问题的答案是肯定的。然而,在实践中,我的编译器(VS2010)似乎并没有在以下情况下提示:我有一个抽象基类提供一些公共(public)接口(interface)(但没有数据成员)和从它派生的各种子类和子子类。classBase{public:Base(){}virtual~Base(){}virtualvoidinterfaceFunction1()=0;virtualvoidinterfaceFunction2()=0;private:Base(constBase&);//allderivedclassesshouldbeuncopyableBase&operator

c++ - 在 Qt 自定义对象中使默认构造函数私有(private)

我正在阅读this关于自定义类型的Qt文档页面,它声明如下:Thedefaultconstructor,copyconstructoranddestructorareallrequired,andmustbepublic,ifthetypeistobeintegratedintothemeta-objectsystem.假设我有一个对象需要使用一些必需的参数来构建,因为使用默认构造函数构建它没有意义,例如:structIntPair{IntPair(intfirst,intsecond);~IntPair();};如文档所述,要使其在Qt元对象系统中可用,它需要默认构造函数。但实际上,

c++ - 如何在 C++ 中使用可变参数模板同时保持我的实现类私有(private)?

#includeclassbuiltin_pack{longv[4];public:builtin_pack(longv1,longv2,longv3,longv4):v{v1,v2,v3,v4}{}voidbuiltin_op(){printf("%lx,%lx,%lx,%lx\n",v[0],v[1],v[2],v[3]);};templatevoidbuiltin_apply(Funcf,Targs...t){for(inti=0;ipack&apply(Funcf,Targs...t){this->builtin_apply(f,t...);return*this;}voido

c++ - 为什么 Visual Studio 的智能感知会显示私有(private)成员和函数?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。在VisualStudio中使用nativec++时,智能感知会显示私有(private)成员和函数,即使在包含类的范围之外也是如此。这使得我很难为我编写的类创建干净的API。这是有原因的吗?这可以预防吗?

c++ - 什么时候可以将模板专门用于私有(private)成员类型?

给出这些定义templateclassfoo{};templateclassfoo1{staticinti;};classbar{classbaz{};};我很惊讶地看到这个编译templateclassfoo{};但这失败并出现错误'classbar::baz'isprivatetemplateintfoo1::i=42;这种情况何时发生,除了公开类型之外是否有解决方法? 最佳答案 考虑CWG#182:Certainaccesschecksaresuppressedonexplicitinstantiations.14.7.2[t

c++ - const 将公共(public)成员引用到私有(private)类成员 - 为什么它有效?

最近,我发现了一个有趣的讨论,讨论如何在不使用多个getter混淆设计的情况下允许对私有(private)成员进行只读访问,其中一个建议就是这样做:#includeclassA{public:A():_ro_val(_val){}voiddoSomething(intsome_val){_val=10*some_val;}constint&_ro_val;private:int_val;};intmain(){Aa_instance;std::cout输出:$./a.out0130GotW#66明确指出对象的生命周期开始whenitsconstructorcompletessucces

具有私有(private)复制构造函数的 C++11 std::is_convertible 行为

我正在努力理解std::is_convertible在C++11中。根据cppreference.com,std::is_convertible::value当且仅当“如果类型为T的虚数右值可用于返回U的函数的返回语句中”,则应计算为1。不过,措辞并未说明该函数可能在何处声明。当U的复制构造函数时,人们应该期待什么?是私有(private)的?当T时应该期待什么是左值引用吗?例如,考虑这段代码:#include#includestructFact_A;structA{friendstructFact_A;A()=default;A(A&&)=delete;private:A(const

c++ - 使用私有(private)嵌套类型作为参数

我遇到了一个奇怪的问题,我不知道为什么会这样。以下代码片段的第一和第二个编译,而第三个不编译:编译:classFoo{public:Foo(){Bar();}private:classBar{};};编译:classFoo{classBar{};//Oronlyforwarddeclarehereanddefinelaterpublic:Foo(Bar){}}不编译:classFoo{public:Foo(Bar){}private:classBar{};};是什么导致第三个编译失败而第一个可以编译? 最佳答案 通常,在C++中,您

c++ - 试图访问一个类的私有(private)成员以解决重载是否是不正确的?

在尝试创建特征以检查类字段是否公开可用时,我创建了一个代码:#include#includetemplatestructdoes_not_have_foo:std::true_type{};templatestructdoes_not_have_foo().foo,void())>:std::false_type{};classFoo{intfoo;};intmain(){static_assert(does_not_have_foo::value);}但在[gcc]中似乎编译失败([clang]在这里似乎更宽松)有一个错误:prog.cc:8:56:error:'intFoo::fo