草庐IT

dynamic-class

全部标签

c++ - 断言中的 dynamic_cast 导致错误

我正在使用过时的VisualStudio2008(让我为您省去“这是您的问题”的麻烦。)这似乎是VisualStudio的问题:http://rextester.com/XKFR77690这似乎是assert的问题宏:http://ideone.com/bhxMi0给定这些结构:structbase{virtual~base(){}};templatestructFoo:base{Tfoo;};我能做到:base*test=newFoo>;if(dynamic_cast>*>(test)!=NULL)cout但是当我使用与if中完全相同的代码时-assert中的声明:assert(dy

c++ - "Template argument for template template parameter must be a class template or type alias template"

templatestructList{};templateclass>structListHelper;templatestructListHelper>{};^/*Error:Templateargumentfortemplatetemplateparametermustbeaclasstemplateortypealiastemplate*/怎么了?我正在使用clang++SVN。 最佳答案 您有一个模板模板参数。您必须传递一个模板作为其参数。您改为将模板实例化作为其参数传递-这是一个具体类,而不是模板(其所有参数均已绑定(bi

c++ - 带有 const 指针的 boost::dynamic_pointer_cast 不起作用?

假设我有两个类,A和B,其中B是A的子类。我还有以下功能:voidfoo(boost::shared_ptra){boost::shared_ptrb=boost::dynamic_pointer_cast(a);//Error!}用gcc编译会出现以下错误:C:\Boost\include/boost/smart_ptr/shared_ptr.hpp:Inconstructor'boost::shared_ptr>::shared_ptr(constboost::shared_ptr&,boost::detail::dynamic_cast_tag)[withY=constA,T=c

c++ - 我们是否需要显式调用分配给 "simple POD classes"的 "placement new"的析构函数?

这里的“简单”是指具有非虚空析构函数或POD类型的类。典型例子:charbuffer[SIZE];T*p=new(buffer)T;...p->~T();//如果我们不在p上调用显式析构函数会怎样?我不认为这是未定义的行为或内存泄漏。重用buffer有什么问题吗? 最佳答案 从技术上讲,假设析构函数不释放在构造期间获取的任何资源,则可能没有必要。但是,考虑到非技术方面——代码的维护和演进——我会坚持最佳实践——构建的东西应该被破坏。要考虑的场景-如果将来某些更改将确定要放入析构函数中的相关代码怎么办?你会记得你怀疑过那种类型的对象的

c++ - Class vs Struct 仅用于数据?

在这种情况下,使用类而不是结构有什么优势吗?(注意:它只会保存变量,永远不会有函数)classFoo{private:structPos{intx,y,z};public:PosPosition;};对比:structFoo{structPos{intx,y,z}Pos;};类似问题:WhenshouldyouuseaclassvsastructinC++?WhatarethedifferencesbetweenstructandclassinC++?WhenshouldIuseastructinsteadofaclass? 最佳答案

C++ 错误 : object of abstract class type is not allowed: pure virtual function has no overrider

继承有问题。我不知道我做错了什么。FigureGeometry.h#ifndefFIGUREGEOMETRY#defineFIGUREGEOMETRYstaticconstfloatPI=3.14159f;classFigureGeometry{public:virtualfloatgetArea()const=0;virtualfloatgetPerimeter()const=0;};#endifCircle.h#ifndefCIRCLE#defineCIRCLE#include"FigureGeometry.h"classCircle:publicFigureGeometry{fl

c++ - 前向声明包括,在声明之上包括(ClassFwd.h + Class.h)

在EffectiveC++(第3版)中,ScottMeyers在第31项中建议,类应该在其经典的声明(.h)和定义(.cpp)文件之上有一个前向声明包含文件(fwd.h)不需要完整定义的类可以使用,而不是前向声明自己。我有点看到它的情况,但我真的不认为这是一个可行的选择......它似乎很难维护,相当大材小用而且几乎没有必要。但是,我可以看到它用于模板前向声明,这是相当繁重的。但是对于简单的类?维护起来似乎很痛苦,并且会创建大量几乎空的包含文件,这些文件的用途很小……值得这么麻烦吗?这是一个例子://Class.hclassClass{Class();~Class();};//Clas

c++ - this->field 和 Class::field 之间的区别?

我想知道C++中的一些东西。承认以下代码:intbar;classFoo{public:Foo();private:intbar;};在我的类(class)中,this->bar和Foo::bar之间有什么区别吗?是否存在无效的情况? 最佳答案 在Foo类中(具体来说)两者之间没有区别,因为bar不是static。Foo::bar被称为成员bar的完全限定名,这种形式在层次结构中可能有多个类型定义一个同名成员。例如,您需要在此处编写Foo::bar:classFoo{public:Foo();protected:intbar;};c

c++ - C++ 中的 dynamic_cast 开销

我知道dynamic_cast有运行时检查,因此考虑更安全(可以在失败时返回空指针)但比static_cast慢。但是两者之间的开销有多糟糕?我真的应该考虑在循环中使用static_cast来解决常规大型项目中的性能问题吗?或者差异很小,只与特殊的实时程序有关。 最佳答案 你分析过它吗?规则是:当您知道目标类型有效时使用static_cast。当您不确定时使用dynamic_cast,并且您需要程序为您查找对象的运行时类型。就这么简单。所有其他考虑因素都是次要的。 关于c++-C++中的

c++ - 对 `Static Class Member variable inside Static member function' 的 undefined reference

我实际上正在尝试实现分页的模拟,在我的内存管理器中,我尝试创建一个静态页表,但是当我尝试打印它时它给出了引用错误。#ifndefMEMORYMANAGER_H#defineMEMORYMANAGER_H#include"memory.h"classMemoryManager{private:PhysicalMemoryRAM;LogicalMemoryVM;intoffsetValue;staticint**pageTable;public:MemoryManager();booladdProcess(TimeSliceRequest);voidprintVirtualMemory()