草庐IT

typedeffing

全部标签

c++ - 如何定义依赖于模板参数的 typedef 的 typedef

我想制作一个typedef,它依赖于模板参数中typedef的存在:structfoo{usingMyType=int;};templatestructbar{//Pseudocode#ifT::MyTypeisdefinedusingMyType=T::MyType;#elseusingMyType=double;#endif};有没有办法让它在C++14中使用std::conditional或其他东西工作? 最佳答案 有一点sfinae。templatestructtype_or_default{usingtype=Fallba

c++ - 模板的模板 typedef

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:C++templatetypedef我正在尝试通过另一个模板的预特化来派生另一个模板的模板类型:templatestructtest{enum{TEST_X=a,TEST_Y=b,TEST_Z=c,};};templatetypedeftesttest01;但是,在GCC4.4.5上,我收到此错误:error:templatedeclarationof'typedef'onthesecondtype(test01)。非常感谢您的指导,因为我不明白我的代码有什么问题。

c++ - typedef 结构和枚举,为什么?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:Purposeofstruct,typedefstruct,inC++typedefstructvsstructdefinitions在我维护的代码中,我经常看到以下内容:typedefenum{blah,blah}Foo;typedefstruct{blahblah}Bar;代替:enumFoo{blah,blah};structBar{blahblah};我一直使用后者,这是我第一次看到前者。所以问题是为什么一个人会使用一种风格而不是另一种风格。有什么好处吗?它们在功能上也相同吗?我相信他们是但不是10

c++ - 为什么 map 上的 BOOST_FOREACH 仅适用于 typedef

我试图通过map编写一个简单的循环元素,我想知道为什么我使用的第一种语法不起作用/无法编译?我写的第一个版本如下,它不能用VS'2008/boost版本1.44编译:std::mapmyMap;...BOOST_FOREACH(map::value_type&p,myMap){}现在,如果我像下面这样重写代码,编译就可以了,但为什么呢?typedefstd::mapmyMap_t;myMap_tmyMap;...BOOST_FOREACH(myMap_t::value_type&p,myMap){} 最佳答案 它是一个预处理器宏,它

c++ - typedef 智能指针是不好的做法吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion我在当前的项目中使用智能指针,使用它们时必须键入长行代码似乎非常麻烦。因为我希望我的代码更简洁、更容易理解,所以我开始像这样对智能指针进行类型定义:typedefstd::unique_ptrSystemPtr;所以我的问题是,typedef智能指针是不好的做法吗?

c++ - typedef 的有效使用?

我有一个要通过网络发送的char(即字节)缓冲区。在将来的某个时候,我可能想将缓冲区切换为不同的类型,例如unsignedchar或short。我一直在考虑做这样的事情:typedefcharbufferElementType;每当我对缓冲区元素执行任何操作时,我都会将其声明为bufferElementType而不是char。这样我就可以通过更改这个typedef来切换到另一种类型(当然不会那么简单,但至少可以很容易地识别出需要修改的地方......会有一个bufferElementType附近)。这是对typedef的有效/良好使用吗?这不值得麻烦吗?将来某个时候它会让我头疼吗?这会

c++ - C++ 中复杂的 Typedef

我知道typedef可以用来定义一个新的自定义类型,例如://simpletypedeftypedefunsignedlongulong;//thefollowingtwoobjectshavethesametypeunsignedlongl1;ulongl2;我最近遇到了这个typedef,并在破译声明中发生的事情时迷失了方向:typedefint16_tCALL_CONVENTION(*product_init_t)(product_descript_t*constdescription)有人可以指导我并解释这是在做什么吗?编辑:将NEW_TYPE更改为CALL_CONVENTIO

c++ - 为什么我应该在 C++ 中使用 typedef 声明一个枚举?

我的代码看起来像这样:enumEEventID{eEvent1,eEvent2,...eEventN};经过审核并更改为typedefenum{eEvent1,eEvent2,...eEventN}EEventID;两者有什么区别?为什么要做出改变?当我看着thisquestion,唯一提到typedef的地方被否决了。 最佳答案 这两者在C++中是相同的,但在C中它们是不同的——在C中,如果你使用typedef,你会得到在C和C++之间兼容的代码(因此可以在头文件中自由使用,可能用于C或C++)。这是我能看到的偏爱它的唯一原因。

c++ - 为什么模板 typedef 是 C++(不是 C++11)中的一个问题

在thisquestionOP要求提供模板typedef的解决方案,这在C++中是不可能的。OP自己也提出了一个解决方案,但不喜欢它:templateclassMatrix{//....};//Problem-willnotcompiletypedefMatrixVector;//SolutiontemplateclassVector:publicMatrix{};我的问题是,Helper::typesolution有什么优势?给我们OP的解决方案(假设这些类永远不会被基指针或new这样使用)?一个空类在发布时应该没有开销(或者是吗?)。我能看到的唯一缺点是,在调试构建中,您必须在调试

c++ - 为什么当 typedef const 指针与 extra const 一起使用时编译器不报错?

以下给出了预期的错误:int*constconstp=newint;//g++error:duplicatecv-qualifier但下面没有给出任何错误,即使它等同于上面的错误:typedefint*constintp_const;intp_constconstp=newint;//ok!//^^^^^duplicate?为什么编译器会忽略额外的const?[注:intp_constconst与constchar*const不同,因为*p=;是可能的。] 最佳答案 在7.1.5[dcl.type](C++03)中,规定在通过typ