草庐IT

多重性

全部标签

c++ - 在 C++ 中使用自定义比较函数初始化多重集

考虑以下比较函数:boolcompare(std::shared_ptr&lhs,std::shared_ptr&rhs){returnlhs->valuevalue;}现在的想法是初始化一个类型为std::shared_ptr的多重集。它对具有上述功能的元素进行排序。所以从我读的书中应该这样做:std::multiset,decltype(compare)*>myset{compare};问题:我的问题是,在声明中我理解函数指针被传递来引用比较函数,但为什么我们用{compare}初始化集合?它的重要性是什么?为什么有必要这样做?? 最佳答案

c++ - 共享 header 导致多重定义符号错误

考虑以下头文件示例:shared_example.h#ifndefSHARED_EX#defineSHARED_EXconstintShared_Int=1;constchar*Shared_CString="Thisisastring";#endifshared_example.h文件包含在多个编译单元中,这导致链接器(正确地)提示:错误LNK2005:“charconst*constShared_CString”(?Shared_CString@@3PBDB)已在First_Compilation_Unit.obj中定义从此文件中删除Shared_CString常量可消除此问题。所

c++ - 遵守标准有多重要?

对于像C++这样的语言,标准的存在是必须的。优秀的编译器会尽最大努力(好吧,至少是大多数优秀的编译器)来遵守。许多编译器都有语言扩展,其中有些是标准允许的,有些则不是。后一种2个示例:gcc的类型Microsoft的编译器允许纯虚函数声明同时具有纯说明符(=0)和定义(这是标准禁止的-让我们不讨论为什么,那是另一个话题:)(还有很多其他的例子)这两个示例在以下意义上都很有用:example1是一个非常有用的功能,将在c++0x中以不同的名称提供。example2也有用,微软已经决定不尊重毫无意义的禁令。我很感激编译器提供了语言扩展来帮助我们的开发人员完成日常工作。但这里有一个问题:不应

c++ - 多重继承情况下的销毁顺序

在多重继承的情况下,销毁顺序是否明确定义?structA{~A(){std::cout对于我的编译器打印的给定代码:ABBA但是我使用了更复杂的构造(包括CWinApp),我得到了不同的结果。那么顺序是否明确?如果是这样,排序规则是什么? 最佳答案 来自[class.dtor]:Basesandmembersaredestroyedinthereverseorderofthecompletionoftheirconstructor(see12.6.2).构造函数顺序,来自[class.base.init]:Inanon-delega

c++ - c++中没有虚函数的多重继承

我遇到了菱形继承(钻石问题),并针对同一颗钻石的不同情况找到了不同的解决方案。但是我找不到“链式”钻石的解决方案。根据结构:是的,我想每次都有多个基类,所以虚拟继承不是一个解决方案(那它甚至被称为diamond吗?)。我还想避免为钻石的每个中间层使用get/set函数。pp||kk\/sclassparent{intval;};classkid1:publicparent{};classkid2:publicparent{};classschool:publickid1,publickid2{};在父类中访问val现在如下所示:school*s=newschool;s->kid1::v

c++ - C++多重继承中构造函数中调用基成员

假设我有这两个类classbase_size{public:intsize(){return5;}};classbase_implement{public:base_implement(ints):_vec(s){cout_vec;};如果我要继承这两个类,在另一个类的构造函数中调用其中一个类的成员函数是否可以?例如classderived:publicbase_implement,publicbase_size{public:derived():base_size(),base_implement(size()){//IsthisOK?//Ifderivedisnotyetconst

c++ - Qt/C++中多重继承的正确方式是什么?

在我的Qt应用程序中,我有一个基类如下。我正在使用QObject,因为我想在所有派生类中使用Signal-Slot机制。classIRzPlugin:publicQObject{public:virtualvoidregisterMenu(QWidget*);virtualvoidexecute();}然后我有另一个类如下。我需要从QWidget进行扩展,因为我需要在所有派生类中实现事件处理方法(例如mouseMoveEvent()、keyPressEvent()和其他)。classIRzLayeringPlugin:publicIRzPlugin,publicQWidget{}但是编

c++ - 链接静态库时内联函数的多重定义

我有一个用mingw(Windows的gcc)编译的C++程序。使用包含gcc4.4.1的mingw的TDM版本。可执行文件链接到两个静态库(.a)文件:其中一个是用C编写的第三方库;另一个是我编写的C++库,它使用C库在顶部提供我自己的C++API。C库功能的一部分(在我看来,过多)是在内联函数中实现的。当您使用C库的API时,您无法避免包含内联函数,但是当我尝试将它们全部链接在一起时,我收到链接错误,指出所有内联函数都有多个定义-我都有在我的C++包装器库和我没有调用过的包装器库中调用,基本上在header中内联定义的任何内容都已在C库和C++库中为其创建了一个函数。在同一个项目的

c++ - 多重继承和多态问题

考虑这个C++代码:#includeusingnamespacestd;structB{virtualintf(){return1;}intg(){return2;}};structD1:publicB{//(*)intg(){return3;}};structD2:publicB{//(*)virtualintf(){return4;}};structM:publicD1,publicD2{intg(){return5;}};intmain(){Mm;D1*d1=&m;coutf()(m).g()(d1)->g()它打印1225.如果我们进行虚拟继承,即添加virtual之前publ

c++ - [] 运算符和多重继承的歧义

这个问题在这里已经有了答案:Whydomultiple-inheritedfunctionswithsamenamebutdifferentsignaturesnotgettreatedasoverloadedfunctions?(3个答案)关闭9年前。考虑以下类:classFoo{public:voidoperator[](conststd::string&s){}voidoperator[](std::size_tidx){}};在这里,给定一个Foof的实例,表达式f[0]没有歧义,因为编译器选择了第二个重载。同样,表达式f["abc"]也没有歧义,因为编译器会选择第一个重载(因