草庐IT

static成员

全部标签

c++ - 通过 boost lambda 占位符访问成员变量

我正在尝试使用lambda表达式打印STL映射中所有项目的第二个成员变量maptheMap;for_each(theMap.begin(),theMap.end(),cout::second,_1)但这不是编译。我基本上想取消引用占位符。知道我在这里缺少什么吗?提前致谢! 最佳答案 尝试:for_each(theMap.begin(),theMap.end(),cout::value_type::second,_1) 关于c++-通过boostlambda占位符访问成员变量,我们在Sta

c++ - boost::序列化可变成员

使用boost::serialization,序列化包含可变成员中的缓存派生值的对象的“最佳”方法是什么?classExample{public:Example(floatn):num(n),sqrt_num(-1.0){}//computeandcachesqrtonfirstreadfloatget_sqrt()const{if(sqrt_numvoidserialize(Archive&ar,unsignedintversion){...}private:floatnum;mutablefloatsqrt_num;};出于维护原因,我想避免将serialize()拆分为单独的sa

c++ - 如何将成员函数作为函数指针传递?

我想给worker类(Class)增加一个记录器功能,如何将成员函数作为函数指针传递?使用mem_fun?这里是代码示例:classWork{public:void(*logger)(conststring&s);voiddo_sth(){if(logger)logger("onlog")};};classsP{public:voidlog(conststring&s)(cout编辑:我不想使用void(P::*xxx)()因为它坚持类P...我知道C++隐藏某事,真正的日志函数是:voidlog(P&p,conststring&s),而真正的项目是这样的:我创建了一个CDialog,

c++ - 使用基类方法初始化派生类成员

合法吗?如果是这样,您认为这是良好的编码习惯吗?我想做这样的事情(不显示不重要的细节):classItemStorage{intsize()const;};classSpecialStorage:publicItemStorage{public:SpecialStorage(...):ItemStorage(...),items(ItemStorage::size()){...}private:intitems;};我很确定如果方法size不是虚拟的就可以了。如果它是虚拟的并且派生类不覆盖它怎么办? 最佳答案 一般规则是,在初始化期

c++ - 如何从成员函数模板类型签名中删除 const?

我正在研究一些C++类型系统的东西,但我在从成员函数中删除const-ness以用于函数特征类时遇到问题。真正麻烦的是,这在G++中运行良好,但MSVC10无法正确处理部分特化,我不知道这些编译器中的一个是否真的存在错误。这里的问题是,以我可以获得函数类型签名的方式从成员函数中删除const限定符的正确方法是什么?采用以下代码示例:#includetemplatestructRemovePointer{typedefTType;};templatestructRemovePointer{typedefTType;};templatestructRemovePointer{typedef

c++ - 与声明分开定义模板类的模板成员

#includetemplatestructFoo{templatestaticboolBar();};templatetemplateboolFoo::Bar(){returntrue;}intmain(){boolb=Foo::Bar();b;}这会导致链接器错误:main.obj:errorLNK2019:unresolvedexternalsymbol"public:staticbool__cdeclFoo::Bar(void)"(??$Bar@J@?$Foo@H@@SA_NXZ)referencedinfunctionmain我需要在类模板的声明之外定义这个成员函数。换句话说

c++ - 将任何类的任何成员函数作为回调函数传递

我正在处理包含一些按钮的OpenGL菜单。我希望能够将任何类的Action(成员函数(具有固定签名)!)关联到按下按钮时执行的按钮。我现在可以做到,但只能针对一种类型。我希望能够使用任何类的任何成员函数进行回调。现在我是这样做的:#defineBUTTONCALLBACK(Func)bind1st(mem_fun(&ClassICanSupport::Func),this)然后我可以像这样创建一个按钮:Button*b=newButton("Bla",BUTTONCALLBACK(functionIWanttoCall));回调函数具有以下签名:voidcallback(Button*

C++:将构造对象的引用传递给构造的成员对象?

好的,考虑以下类:classObject{public://ConstructorObject():[InitializationList]{...}...};classContainer{public:ObjectA;ObjectB;....Container():[InitializationList]{}};我想向对象提供[对容器及其成员的访问权]。我的第一个想法是以某种方式将对当前容器对象的引用传递给对象的构造函数。但我不知道该怎么做。我搞砸了“这个”,但我没有得到任何有用的东西。我试过这样的事情:classObject{public:Container&c//Construc

C++ 摆脱单例 : alternative to functors and static methods

我崇高的追求是摆脱单例和静态类。背景:我有以下结构:Cmd经常实例化的对象,它保存命令的名称(字符串),以及任何类的静态方法的仿函数作为指针。它通常在主类中创建,例如Input、Console、Render等,并引用创建它的类中的方法,为这些方法提供运行时口头接口(interface)。Cmds还以字符串数组的形式解释参数,其中第一个参数是Cmd的名称,所有连续的字符串都是被调用的静态方法的直接参数。参数计数和参数数组存储在Commander中,并在每次Cmd调用之前更改。CommanderCommander用于解释字符串命令(可能直接或通过控制台),并执行以字符串形式存储在缓冲区中的

c++ - std::set 用作静态模板化成员变量

我正在尝试制作类似于Java风格的枚举,我将其称为标志。要求是每个标志都是静态的,因此标志可以直接引用,每个标志存储其名称的字符串和整个集合可迭代并有助于查找。我正在使用模板,以便单独存储每组标志(这样我就不必在每个子类中显式放置一组)。我确信这是一个启动问题,因为运行程序的成功或失败取决于包含标志声明的目标文件的文件名(A.o段错误但Z.o运行良好。)问题似乎是静态初始化顺序之一,这段代码编译得很好,但是当它运行时,gdb产生以下内容:ProgramreceivedsignalSIGSEGV,Segmentationfault.0x00007ffff751e0fainstd::_Rb