草庐IT

成员方

全部标签

c++ - c++ 中有没有一种方法可以确保类成员函数不会更改任何类数据成员?

假设我有一个classDictionary{vectorwords;voidaddWord(stringword)//addstowords{/...}boolcontains(stringword)//onlyreadsfromwords{//...}}有没有办法让编译器检查包含不变化的词vector。Ofc这只是一个类数据成员的示例,我希望它可以与任意数量的数据成员一起使用。附言我知道我没有public:和private:,我故意把它去掉是为了让代码更短,问题更清楚。 最佳答案 如果您希望编译器强制执行此操作,则声明成员函数co

c++ - 如何使用成员作为 C++ 中的键对 vector 元素进行排序

假设我们有一个vectorallstudent现在我想使用不同的成员对学生进行排序,例如姓名、年龄、地址等。我该怎么做? 最佳答案 创建一个仿函数来比较正确的字段,然后在排序时指定仿函数:structby_age{booloperator()(studentconst&a,studentconst&b)const{returna.age从C++11开始,您可以使用lambda表达式“就地”进行比较,如下所示://sortbyname:std::sort(students.begin(),students.end(),[](stude

c++ - 将成员函数添加到绑定(bind)到 Lua 的 C++ 类

我一直在研究如何将C++类绑定(bind)到Lua以便在游戏引擎中使用,我遇到了一个有趣的问题。我一直在关注这个网站上的教程:http://tinyurl.com/d8wdmea.在教程之后,我意识到他建议的以下代码:localbadguy=Monster.create();badguy.pounce=function(self,howhigh,bonus)self.jumpbonus=bonusor2;self:jump(howhigh);self:rawr();endbadguy:pounce(5,1);只会将突袭功能添加到怪物的特定实例。所以我将他建议的脚本更改为以下内容:fun

c++ - 推导成员函数和变量的模板参数

对于令人困惑的标题,我深表歉意,我找不到更清晰的方式来表达我的问题。我正在尝试使用std::functions来实现回调。这个想法是将“Action”映射到函数,并提供一个简单的界面来跟踪在某个Action发生时调用哪些函数。这是我的类(class)的简化版本:templateclassA{public:voidRegister(IDid,std::functionfunct){m_listeners.emplace(id,funct);}A(){}~A(){}private:std::unordered_multimap>m_listeners;};我真正想要的是A只有1个模板模板因

C++ 成员模板特化语法

关于thissite有以下段落:Whendefiningamemberofanexplicitlyspecializedclasstemplateoutsidethebodyoftheclass,thesyntaxtemplateisnotused,exceptifit'samemberofanexplicitlyspecializedmemberclasstemplate,whichisspecializedasaclasstemplate,becauseotherwise,thesyntaxwouldrequiresuchdefinitiontobeginwithtemplater

c++ - 使用虚拟继承的类似乎允许基类构造函数覆盖另一个基类的成员

我对包含虚拟基的对象的内存布局不够熟悉,无法理解为什么以下内容似乎被clang和gcc编译错误。这是一个学术练习,所以请原谅构造函数中memset()的轻率。我正在使用带有clang7和gcc8.2的Linuxx86-64进行测试:#includestructA{A(){memset(this,0,sizeof(A));}inti;chara;};structB{charb='b';};structC:virtualB,A{};charfoo(){Cc;returnc.b;}当使用-O2-Wall-pedantic-std=c++17编译时,两个编译器都会生成以下没有警告的程序集:fo

c++ - 我可以在抽象类中有静态数据成员吗?

我设计了一系列相关的类,为了能够管理它们,我让它们派生自一个抽象类。这些类都需要访问一系列共享资源,我发现自己在每个类中创建了一个指针vector,所有这些都相同(它们必须相同)。似乎在基类中创建一个静态成员会让所有派生类都可以访问这个vector,这意味着我只需要构建它一次(它在构建之后也不会改变,只是查找)。我的问题是这是否可以,如果可以,我该如何构建它,而不从其中一个派生类调用“填充vector”方法?我的想法是做类似的事情classResource{};enumR{RES0,RES1};classAbstractClass{public:virtualvoidOnInit()=

c++ - 静态库的静态成员

我有静态库和静态成员。该库静态链接到主应用程序及其插件之一。看起来像是在main(应用程序)和dll(插件)中初始化的静态变量。问题:动态库加载时如何避免静态变量重新初始化。或者我可能错过了一些简单的东西?更多信息:这是一个简单的静态库,包含静态成员及其getter和setter:orbhelper.hclassORBHelper{staticstd::stringsss_;public:staticstd::stringgetStr();staticvoidsetSTR(std::stringstr);};orbhelper.cppstd::stringORBHelper::sss_

c++ - 对类成员使用声明应为成员声明 (C++2003)

第7.3.3段。C++2003标准声明Usingdeclarationforaclassmembershallbeamemberdeclaration.这意味着下面给出了一个语法错误:structS1{staticintvar1;};usingS1::var1;虽然以下编译正常:namespaceN2{intvar2;}usingN2::var2;有人知道这背后的基本原理(如果有的话)吗?此外,该标准给出了带有结构静态数据成员的显式示例,并告知它应该导致语法错误。MSC++给出了这个错误:cpptest1.cxx(9):errorC2885:'S1::var1':notavalidus

c++ - 基类的函数模板是否可以分配给指向成员函数的指针

下面的代码应该在C++98/03中编译吗?structBase{templatevoidfunc(){}voidnorm(){}};structDerived:publicBase{};templatestructUsage{typedefvoid(U::*Method)();Usage(Methodtest){}};intmain(){Usagegood(&Derived::norm);//"Error:Cannotusevoid(*)()toinitializeUsage."onnextlineUsagebad(&Derived::func);return0;}这段代码片段在我尝试