草庐IT

static成员

全部标签

c++ - 虚拟调度后调用基础成员(模拟类似虚拟析构函数的调度)

虚拟调度只是选择“正确”的东西在层次结构中调用。我想实现类似于析构函数行为的功能,其中首先调用派生析构函数,然后调用层次结构中的所有析构函数,直到最上层。客户端应该只定义成员函数,调用顺序应该自动解析。我有一个使用CRTP且没有虚拟调用的解决方案草案;它有其优点和缺点:#include#includeusingnamespacestd;templatestructDispatcher{voidf(){((T*)this)->f();std::cout{voidf(){std::cout>obj=make_shared();obj->f();}Demo这样用户就可以简单地从调度器派生并定

c++ - 返回成员变量时,编译器是否进行返回值优化?

给定以下代码classfoo{private:boost::shared_ptr>m_ptr;public:foo();boost::shared_ptr>get_my_ptr(){returnm_ptr;}};当我们像这样调用get_my_ptr()函数时boost::shared_ptr>ptr=get_my_ptr()编译器是调用拷贝构造函数创建ptr对象还是执行nrvo?和我们这样叫有什么区别constboost::shared_ptr>&ptr=get_my_ptr() 最佳答案 使用NRVO,编译器可以省略复制和移动构造

c++ - 如何在编译时获取类中的成员数

我经常遇到必须实现自定义复制/移动构造函数的情况。然而一段时间后,该类被扩展了一个新成员并且这个自定义复制/移动构造函数没有更新,所以我正在寻找一种方法来防止代码在不更新这些方法的情况下编译。标题代码:classMyClass{public:MyClass(constMyClass&rhs);//...private:std::string_s;std::unique_ptr_owned;bool_b;};Cpp代码:MyClass::MyClass(constMyClass&rhs):_s(rhs._s),_b(rhs._b){if(rhs._owned)_owned=rhs._ow

C++中类的6个默认成员函数 【拷贝构造函数】

文章目录拷贝构造函数的使用拷贝构造对于自定义类型【浅拷贝】深拷贝拷贝构造函数典型调用场景拷贝构造函数的使用在前几章学习对象的时候,我们有的时候需要一个与已存在对象一某一样的新对象那在创建对象时,可否创建一个与已存在对象一某一样的新对象呢?拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。拷贝构造函数也是特殊的成员函数,其特征如下:拷贝构造函数是构造函数的一个重载形式。拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。classDate{public: Da

C++ 多参数模板化类成员特化

我正在设置一个c++(11)程序,我在其中使用了一个依赖于2个参数的模板化类。该类的大部分内容都可以根据模板参数进行通用编写。只有少数功能需要专门的版本。这是重现我的问题的示例模式:templateclassfoo{//typedefsandmembersthatdependonTandN//butthatcanbewrittengenericallye.g.:typedefstd::arraymyarray;voidmyfunc(myarraytab);};//...templatefoo::myfunc(myarraytab){//genericversion}//needspec

c++ - 内置成员的默认初始化

这个问题在这里已经有了答案:Defaultconstructors,initializationofPODandimplicittypeconversionsinC++11(2个答案)关闭6年前。BjarneStroustrup的TheC++ProgrammingLanguage,4thEdition,17.6.3.1指出The‘‘defaultinitialization’’ofabuilt-inmemberleavesthatmemberuninitialized.引用编译器默认生成的构造函数。但是在17.6.2中我们有如下代码structS{stringa;intb;};Sf(S

c++ - C 样式转换和 C++ static_cast 到指针的引用

这不是C++11我对微软的第三个参数感兴趣CMapStringToOb::GetNextAssoc,其定义如下:voidGetNextAssoc(POSITION&rNextPosition,CString&rKey,CObject*&rValue)const;然后我得到了以下用于测试的简单代码:两个好的案例和一个编译器错误的案例。classCMyObject:publicCObject//inordertouseCMapStringToOb{public:CMyObject(CStringname_):name(name_){}voidSayHello(){TRACE(_T("hel

c++ - 基类重载方法,默认成员变量

我有一个类结构如下:classBase{public:voidsetDefault(uint8_tmy_default){m_default=my_default;}voidmethod(uint8_t*subject){method(subject,m_default);}virtualvoidmethod(uint8_t*subject,uint8_tparameter)=0;protected:uint8_tm_default;};classDerived1:publicBase{public:voidmethod(uint8_t*subject,uint8_tparameter

c++ - std::function vs Lambda 用于传递成员函数

我正在为游戏引擎创建一个消息系统,引擎的最终用户可以在其中创建消息对象并将其传递给游戏对象,以由包含附加到游戏对象的组件的监听器对象进行解释。如果消息与监听器正在监听的消息相匹配,则监听器应调用函数指针并将接收到的消息传递给它。基本结构看起来像这样:classMessage{std::stringmessage;};classListener{std::stringtarget;void(*fn)(Message*);};使用游戏对象的代码来接收如下所示的消息://ifthequeueisemptythendontdoanythingif(messageQueue.empty()){r

c++ - 小于运算符不能作为成员函数重载

我想在map中使用我的class作为key,所以我重载了operator+。如果我将它重载为友元函数,它会很好用。当我将它作为类中的成员函数重载时,会导致编译错误。errorC2678:binary'.详细来说,这不会编译,并产生编译错误:西尔.hbooloperatorSyl.cppboolSyl::operator编译时。西尔.hfriendbooloperatorSyl.cppbooloperator我不知道为什么。我知道operator 最佳答案 通常,成员运算符,例如operator不要修改他们操作的对象。如果是这种情况,