草庐IT

c++ - 类型定义和转换

typedef似乎是特定于C++的(可能在某些其他语言中)。我发现它隐藏了值的真实数据类型,因此使项目新手感到困惑。也许有时缩短打字是有用的。你什么时候推荐使用typedef?我还注意到我无法将typedef值传递给接受基础类型的函数?类似于:typedefstringVAL;VALs="x";func(stringx);//ifItrytopass`s`,Igetsomethinglikenoinstanceoffunctiontemplatematchargumentlist 最佳答案 typedef是用于从现有类型创建新类型的

C++理解cocos2d-x函数指针的使用

我正在尝试扩展cocos2d-xCCMenuItem组件,并遇到了一些我以前在C++中从未见过的东西。如果有人能详细说明他们的函数指针声明发生了什么,那将会很有帮助大多数cocos2d-x对象的基类是CCObject,其定义如下classCC_DLLCCObject:publicCCCopying{public://Codeomitted};//ThepartinwhichIhaveaquestionabouttypedefvoid(CCObject::*SEL_SCHEDULE)(float);typedefvoid(CCObject::*SEL_CallFunc)();typede

c++ - typedef type * type::* ,它是什么?

我有以下代码:structmyType{myType*ptr;};typedefmyType*myType::*other_type;第二行typedef'ining是什么?这是一个返回myType指针或其他东西的成员函数吗? 最佳答案 将other_type定义为指向myType成员的指针,其中所述成员本身是指向myType的指针。例如,您可以这样使用它:other_typex=&myType::ptr;myTypemine;mine.*x=&mine;为什么你会这样做,我不能说。 关

c++ - typedef a std::string - 最佳实践

我正在用标准C++编写一个库来进行语音转换。到目前为止,我已经使用了std::string。但将来我可能不得不将其更改为其他内容(std::wstring或其他内容)。所以我需要以一种可以轻松切换的方式编写我的库。到目前为止,我已经完成了以下工作。创建了一个将被所有CPP文件使用的头文件为此添加了“typedefstd::string”,并在文件中各处使用了新名称。如果我需要改变类型,我可以简单地在头文件中改变,它会在所有地方反射(reflect)出来。如果有人能看出这是正确的方法或者有更好的方法来做到这一点,我将不胜感激?谢谢 最佳答案

c++ - 如何检测是否定义了 errno_t?

我正在使用来自VisualC++2008的gcc编译代码。代码使用的是errno_t,但在某些版本的gccheader中包括没有定义类型。如何检测类型是否已定义?是否有一个定义表明类型已定义?如果它未定义,我想提供typedef让代码在所有平台上正确编译。 最佳答案 Microsoft的errno_t是多余的。errno由ISOC标准定义为int类型的可修改左值。如果您的代码需要存储errno值,那么您应该将它们放入int中。进行全局搜索并替换s/errno_t/int/就完成了。编辑:此外,您不应在代码中提供typedefinte

c++ - 检测并报告 typedef 错误……这是在做什么?

我正在阅读有关通过使用固定宽度整数使代码更具可移植性的内容。我找到了this帮助解释事情的文章,最后它建议使用这个匿名union来检测和报告typedef错误:staticunion{charint8_t_incorrect[sizeof(int8_t)==1];charuint8_t_incorrect[sizeof(uint8_t)==1];charint16_t_incorrect[sizeof(int16_t)==2];charuint16_t_incorrect[sizeof(uint16_t)==2];charint32_t_incorrect[sizeof(int32_t

c++ - 从不兼容类型 'int' 分配给 [custom typdef]

在我的main.c文件的一个方法中,我声明了变量irq_raised,它是irq_type类型。我在另一个文件的typedef中定义了irq_type,并将其#import到main.c的顶部。typedefenum{IRQ_NONE=0x0000,IRQ_VBLANK=0x0001,IRQ_HBLANK=0x0002,IRQ_VCOUNT=0x0004,IRQ_TIMER0=0x0008,IRQ_TIMER1=0x0010,IRQ_TIMER2=0x0020,IRQ_TIMER3=0x0040,IRQ_SERIAL=0x0080,IRQ_DMA0=0x0100,IRQ_DMA1=0x

c++ - 为什么我的 Curiously Recurring Template Pattern (CRTP) 不能引用派生类的 typedef?

这个问题在这里已经有了答案:C++staticpolymorphism(CRTP)andusingtypedefsfromderivedclasses(5个答案)关闭9年前。使用curiouslyrecurringtemplatepattern时,如果我试图从基类中引用属于派生类的typedef,则仅无法引用它们;gcc提示notypenamed'myType'inclassDerived.这似乎与使用typedef、模板和奇怪的重复关系的其他方式不一致。考虑:/*crtp.cpp*/#includeusingnamespacestd;//case1.simple.classBase{

C++ - 前向声明和别名(使用 using 或 typedef)

我需要实现如下接口(interface)structmutex;structinterface{//...mutex&getMutex();};直觉我可以使用usingmutex=ParticularMutex在我的实现中,但gcc告诉我的不是这样:error:conflictingdeclaration‘usingmutex=’error:‘classmutex’hasapreviousdeclarationas‘classmutex’我没有定义任何东西两次,只是声明两次,就像前向声明时一样,所以为什么这行不通?有没有不修改interface的解决方法??应该如何interface被

c++ - 如何从模板化类方法返回依赖类型?

假设我有一个基于模板ThingType的类。在header中,我使用它来typedef依赖类型VectorThingType。我想从GetVectorOfThings()方法中返回它。如果我将VectorThingType设置为返回类型,我会得到一个Doesnotnameatype错误,因为该类型未在此范围内定义。有什么方法可以在不复制typedef中的代码的情况下做到这一点?#include#includetemplateclassThing{public:ThingTypeaThing;typedefstd::vectorVectorThingType;VectorThingTyp