这是我的标题:#ifndefTIMING_H#defineTIMING_H#defineMAX_MESSAGES1000typedefMessage*MessageP;//insidetheclass?classTiming{public:Timing();private:structMessage{Agent*_agent;double_val;};MessageP*_msgArr;int_waitingMsgs;};我的问题是:我必须将typedef放在MessageP*_msgArr正上方的类block中,还是可以将它放在所有#define附近?它不输出编译错误所以我不确定。
我有一个类型定义typedefunsignedintmy_type;在文件中使用。我想让它在我的所有文件中都可见,没有把它放在所有东西都包含的头文件中。我不想去头文件route因为就目前而言,这将是头文件中的唯一声明(而且似乎没有必要为此添加文件)。有没有办法做到这一点?如果我有:typedefXmy_type;如果X是一个类,我是否需要在任何地方都包含X.h并在最后加上typedefX.h的? 最佳答案 我不想走头文件路线,因为目前这将是头文件中的唯一声明(而且似乎没有必要为此添加文件)。那有什么问题?似乎没有必要不惜一切代价避免
以下代码在VS2008和GCC4.8.2中编译templatestructFoo{};//typedefFooFoo;//Does*NOT*compileintmain(){typedefFooFoo;Foof1;//Foof2;//Does*NOT*compile//::Foof3;//COMPILES}有效吗? 最佳答案 按照C++113.3.10/1:Anamecanbehiddenbyanexplicitdeclarationofthatsamenameinanesteddeclarativeregionorderivedc
当我最近在构建一个项目时,我注意到我收到了关于重新定义BOOST_STRONG_TYPEDEF宏的编译器警告(变成错误)。经过进一步调查,我注意到boost中包含两种不同版本的strong_typedef.hpp:一种在顶层,一种在serialization/中。这两个版本之间实际上也存在差异,而不仅仅是宏的重复版本。顶级版本没有显式地对它的T赋值,而序列化版本则这样做:代码片段:boost/strong_typedef.hpp:Tt;\explicitD(constTt_):t(t_){};\D(){};\D(constD&t_):t(t_.t){}\boost/serializat
好的,我在标题中定义了大约500个函数指针,例如:void(__stdcall*ptr_glAccum)(GLenumop,GLfloatvalue);void(__stdcall*ptr_glActiveTextureARB)(GLenumtexture);void(__stdcall*ptr_glAlphaFunc)(GLenumfunc,GLclampfref);GLboolean(__stdcall*ptr_glAreTexturesResident)(GLsizein,constGLuint*textures,GLboolean*residences);void(__stdc
使用有什么区别typedefSome::Nested::Namespace::TypeNameTypeName;或usingSome::Nested::Namespace::TypeName;在本地范围内提供简写TypeName? 最佳答案 typedef给出类型的别名。typedefSome::Nested::Namespace::TypeNameTypeName;一旦你这样做了,你可以通过在本地命名空间中说TypeName来引用Some::Nested::Namespace::TypeName。usingdeclaration使
我正在尝试编写使用模板参数的成员typedef的代码,但如果模板参数没有该typedef,我想提供默认类型。我试过的一个简化的例子是这样的:structDefaultType{DefaultType(){printf("Default");}};structNonDefaultType{NonDefaultType(){printf("NonDefault");}};structA{};structB{typedefNonDefaultTypeType;};templatestructGet_Type{typedefDefaultTypeType;};templatestructGet
在C++中声明枚举的标准方法似乎是:enum{};但是,我已经看到了一些声明,例如:typedefenum{};如果存在,它们之间有什么区别?哪一个是正确的? 最佳答案 C兼容性。在C中,union、struct和enum类型必须在它们之前使用适当的关键字:enumx{...};enumxvar;在C++中,这不是必需的:enumx{...};xvar;所以在C中,懒惰的程序员经常使用typedef来避免重复自己:typedefenumx{...}x;xvar; 关于c++-声明带有和不
如果你有一个不透明的指针typedef,有没有办法动态引用指向的类型,比如说,在模板中使用?例如,假设你有这样的事情:structFoo;//ForwarddeclaredstructtypedefFoo*FooPtr;//Opaquepointer因为智能指针类型在指针类型方面是模板,所以定义一个std::shared_ptr这其中,似乎不得不说:std::shared_ptrtheSharedPtr;有没有办法在不“手动”解开不透明指针typedef的情况下定义这样的指针?我觉得我必须在这里遗漏一些明显的东西,但你可能会想到这样的事情(注意:这些不起作用):std::shared_
在C++中可以创建一个结构:structMyStruct{...}还可以做以下事情:typedefstruct{...}MyStruct;但据我所知,两者之间没有明显的区别。哪个更可取?如果没有区别,为什么两种方式都存在?哪一种在风格或可读性上比另一种更好? 最佳答案 以下是两个声明/定义之间的区别:1)YoucannotuseatypedefnametoidentifyaconstructororadestructorstructMyStruct{MyStruct();~MyStruct();};//oktypedefstruct