草庐IT

dynamic-class

全部标签

c++ - C++ 中更简单的 "Preventing derived classes"

Bjarne假设有正当理由阻止从某个类派生,给出了一个解决方案here对于“我可以阻止人们从我的类(class)派生吗?”的答案不过,我想到了:classfinal{protected:final(){}//line3};classB:privatevirtualfinal{};classD:publicB{//line9};intmain(){Bb;Dd;//line14}尝试编译时,会得到:foo.cpp:Inconstructor‘D::D()’:foo.cpp:3:error:‘final::final()’isprotectedfoo.cpp:9:error:withinth

c++ - dynamic_cast vs static_cast 无效*

在下面程序的最后两行中,static_cast和dynamic_cast表现不同。据我了解,dynamic_cast的结果始终解析为完整对象的地址。所以它以某种方式使用了RTTI。谁能解释一下编译器如何使用RTTI来区分两者。#includeusingnamespacestd;classTop{protected:intx;public:Top(intn){x=n;}virtual~Top(){}friendostream&operator(&b)(&b);cout(p)(p)可能的输出:https://ideone.com/WoX5DI281,2,3,40xbfcce60410xbf

c++ - 错误 : base class 'A1' has private copy constructor

在windows平台上使用Clang3.7见以下代码:classA1{public:A1(char*name){}virtual~A1(){}private:A1(constA1&){}};classB1:publicA1{public:B1():A1(""){}};我收到以下错误:MyFile(31):8:error:baseclass'A1'hasprivatecopyconstructorB1():A1(""){}^MyFile(25):2:note:declaredprivatehereA1(constA1&){}^公开A1复制构造函数,消除错误!这里发生了什么?注意:通过改变

c++ - "template argument deduction for class templates"是否应该为可变类模板推导出空参数包?

“类模板的模板参数推导”提案(P0091R2)包含以下示例:templatestructX{X(Ts...)};Xx1{1};//OKXXx11;//OKX(除了构造函数定义缺少主体这一事实之外),该示例似乎表明用零参数构造的可变参数类模板将被推导为一个空的参数包。很遗憾,最新版本的g++不同意:intmain(){Xx1{1};Xx11;}Infunction'intmain()':error:invaliduseoftemplate-name'X'withoutanargumentlistXx11;^note:classtemplateargumentdeductionrequir

c++ - 侵入式_ptr : Why isn't a common base class provided?

boost::intrusive_ptr需要intrusive_ptr_add_ref和intrusive_ptr_release被定义为。为什么不提供一个可以做到这一点的基类?这里有一个例子:http://lists.boost.org/Archives/boost/2004/06/66957.php,但海报说“我不一定认为这是个好主意”。为什么不呢?更新:我认为这个类可能被多重继承滥用这一事实是不够的。任何从具有自己的引用计数的多个基类派生的类都会有同样的问题。这些引用计数是否通过基类实现都没有区别。我认为多线程没有任何问题;boost::shared_ptr提供原子引用计数,这个

c++ - 如何在 C++ 中伪造 "visibility of class"(不是函数)?

有nofeaturethatcontrolvisibility/accessibilityofclassinC++.有什么办法可以造假吗?是否有任何C++的宏/模板/魔法可以模拟最接近的行为?情况是这样的Util.h(库)classUtil{//note:bydesign,thisUtilisusefulonlyforBandC//Otherclassesshouldnotevensee"Util"public:staticvoidcalculate();//implementationinUtil.cpp};B.h(图书馆)#include"Util.h"classB{/*...co

启动项目报错:The bean ‘XXXXMapper‘ could not be injected because it is a JDK dynamic proxy

Description:Thebean'studentMapper'couldnotbeinjectedbecauseitisaJDKdynamicproxyThebeanisoftype'com.sun.proxy.$Proxy250'andimplements:   com.xinwei.learning.mapper.StudentMapperExpectedabeanoftype'com.xinwei.learning.manager.education.mapper.TeachingClassStudentMapper'whichimplements:   com.xinwei.co

abstract class 和 interface 有什么区别

目录abstractclass和interface有什么区别1.抽象类1.1抽象类的格式1.2抽象类注意事项2.接口2.1接口的格式2.2接口可以多继承2.3接口的实现(implements)3.异同abstractclass和interface有什么区别1.抽象类抽象类:声明方法的存在而不实现的类,如果一个类中没有包含足够的信息来描绘一个具体的对象,它只能被继承,派生出子类,这样的父类就是抽象类。1.1抽象类的格式[public]abstractclass类名[extends父类][implements接口列表]{//属性声明及初始化;//抽象方法的声明;//非抽象方法声明及方法体;}1.2

c++ - 当编译器看不到可以完成转换的可能类型时,是否允许编译器优化 volatile 指针的 dynamic_cast?

看看这个小片段:structA{virtual~A(){}};structB{};boolfn(){A*volatilea=newA;returndynamic_cast(a);}是否允许编译器完全删除dynamic_cast,并将dynamic_cast转换为简单的nullptr;?这个问题的原因是这个answer.注意事项:假定volatile意味着编译器不能假定任何有关a的信息,因为它是易变的。这是一个question为什么。dynamic_cast可能不允许被删除的事实是程序中某处可能有一个类型,它派生自A和B。 最佳答案

c++ - 遍历 boost::dynamic_bitset

我有一个boostdynamic_bitset我正在尝试从中提取设置位:boost::dynamic_bitsetmyBitset(1000);我的第一个想法是对每个索引做一个简单的“转储”循环并询问它是否已设置:for(size_tindex=0;index但后来我看到了两个有趣的方法,find_first()和find_next()我认为肯定是为了这个目的:size_tindex=myBitset.find_first();while(index!=boost::dynamic_bitset::npos){/*dosomething*/index=myBitset.find_nex