草庐IT

weak-template-vtables

全部标签

C++ - 对`vtable 的 undefined reference

我想知道为什么会出现此错误:对“BaseRenderer的vtable”的undefinedreference我尝试四处搜索,但似乎无法弄清楚。我试过摆脱虚函数,删除构造函数等。我的BaseRenderer.hclassBaseRenderer:publicRenderer{Q_OBJECTpublic:BaseRenderer();BaseRenderer(QWidget*parent);voidpaintGL();virtual~BaseRenderer();publicslots:voidloadDialog();signals:protected:MeshloadMesh(st

c++ - 是否所有类都有编译器为它们创建的 Vtable?

网上有很多关于虚表的资源。他们通常对他们有相同的陈述:"只要类本身包含虚函数或重写父类的虚函数,编译器就会为该类构建一个vtable。这意味着并非所有类都有编译器为它们创建的vtable。vtable包含指向该类中虚函数的函数指针。每个类只能有一个vtable,同一类的所有对象将共享同一个vtable。"那么,为什么这意味着并非所有类都有编译器为它们创建的虚表呢?是不是因为somc类没有虚函数? 最佳答案 没错。有些类没有虚表,因为它们没有任何虚方法。虚方法是您的编译器无法为其生成直接调用的方法,因为它因类的实现而异。Vtable是

c++ - 对 `typeinfo for class' 的 undefined reference 和对 `vtable for class' 的 undefined reference

这个问题在这里已经有了答案:Undefinedsymbols"vtablefor..."and"typeinfofor..."?(5个答案)关闭9年前。我正在处理C++中的继承。我想写一个程序来对两个数组进行加法和减法。这是我的代码:#include#include#includeusingnamespacestd;classroot{protected:intsize;double*array;public:virtual~root(){}virtualroot*add(constroot&)=0;virtualroot*sub(constroot&)=0;virtualistrea

c++ - 对 vtable 的 undefined reference - 虚拟成员,由 gsoap 生成的类

gsoap及其工具wsdl2h和soapcpp2为我提供了一个包含以下内容的soapStub.h文件:classSOAP_CMACns2__SOAPKunden{public:std::string*adresszusatz;//...public:virtualintsoap_type()const{return7;}//...ns2__SOAPKunden():adresszusatz(NULL),x(NULL){}//leftoutallmemberinit.virtual~ns2__SOAPKunden(){}};我从一个小应用程序开始,使用该类使用来自informixDB的数

c++ - 为什么此代码会出现错误 "template specialization requires ' template< >'"?

当我尝试用Clang编译它时templatestructField{charconst*name;Field(charconst*name):name(name){}};templateclassCRTP{staticFieldconst_field;};classClass:publicCRTP{};FieldconstCRTP::_field("blah");intmain(){}我明白了error:templatespecializationrequires'template'FieldconstCRTP::_field("blah");~~~~~~~~~~~^我根本不明白这个错

c++ - 模板元编程 : multiplying a bunch of template arguments

我需要在编译时计算传递给模板化结构的一堆数字的乘积。我成功地做了一个丑陋的解决方案:templatestructmul_all{staticconstexprstd::size_tvalue=n1*mul_all;};templatestructmul_all{staticconstexprstd::size_tvalue=1;};问题是每次我必须像这样将0提供给模板参数到我的结构中intmain(){std::cout::value::value;return0;}是否有任何解决方法来读取最后一个零?注意:我是TMP的初学者。 最佳答案

C++ 链接错误 : Undefined symbols using a templated class

我在编写的类中遇到了一些非常奇怪的链接错误。我完全找不到任何可以描述正在发生的事情的东西。VisualStudio(WindowsXP)players.obj:errorLNK2019:unresolvedexternalsymbol"public:__thiscallTreeNode::TreeNode(void)"(??0?$TreeNode@VPlayer@@@@QAE@XZ)referencedinfunction"public:__thiscallPlayerList::PlayerList(void)"(??0PlayerList@@QAE@XZ)Xcode(OSX10.5

c++ - 何时为多态类初始化 vptr(指向 vtable)?

这与"WhenVTABLEiscreated?"无关.相反,应该在什么时候初始化VPTR?是在构造函数的开头/结尾还是在构造函数之前/之后?A::A():i(0),j(0)-->>here?{-->>here?//...-->>here?} 最佳答案 虚拟调用的机制(通常是一个v表,但不需要)是在ctor-initializer期间、基础子对象构造之后和成员构造之前设置的。[class.base.init]部分法令:Memberfunctions(includingvirtualmemberfunctions,10.3)canbec

c++ - 是否有与 shared_from_this 等效的 weak_ptr?

我有一个类,我知道它将永远属于std::shared_ptr。然而,将shared_ptr甚至weak_ptr传递给不需要所有权或生命周期保证的函数和方法会产生不必要的开销。为了解决这个问题,我经常将原始指针传递给函数。该类本身继承自std::enable_shared_from_this,因此如果函数需要获取指针的所有权,它可以使用该类的方法来获取shared_ptr。一切都很顺利。然而,有些情况下我真的不想从原始指针创建一个shared_ptr,我想要的是一个weak_ptr。根据我对std::shared_ptr的通常实现的理解,它有两个用作引用计数器的原子变量;一个用于shar

c++ - 我可以从 boost 的 weak_ptr 获得原始指针吗?

是否可以从boost::weak_ptr获取原始指针?Boost的shared_ptr有get()方法和“->”运算符。weak_ptr不具有相同功能背后有什么理由吗? 最佳答案 weak_ptr拥有一个非拥有引用,因此它所引用的对象可能不再存在。使用weak_ptr持有的原始指针本质上是危险的。正确的方法是使用weak_ptr::lock()将weak_ptrboost为shared_ptr并从中获取指针。Boostweak_ptrdocumentation解释了为什么将get()功能作为weak_ptr的一部分提供是不安全的,并