草庐IT

pseudo-typedef

全部标签

c++ - 令人困惑的 typedef 涉及类范围

我正在阅读一个C++项目的代码,它包含以下形式的一些代码:namespacens{classA{};classB{};}structC{typedefns::A*ns::B::*type;};谁能解释typedef行的含义?type似乎是指向ns::B成员的某种指针,它指向ns::A,但我不确定.真实代码中的类A和B不为空,但我觉得这里不相关。这是一个liveexample. 最佳答案 ns::B::*是一个指向B的成员变量的指针。那么ns::A*就是它的类型。所以整个声明意味着B类型的指针成员变量ns::A*

C++ 静态多态性 (CRTP) 和使用派生类的 typedef

我阅读了Wikipediaarticle关于C++中用于执行静态(阅读:编译时)多态性的奇怪重复模板模式。我想对其进行概括,以便可以根据派生类型更改函数的返回类型。(这似乎应该是可能的,因为基类型知道模板参数的派生类型)。不幸的是,以下代码无法使用MSVC2010编译(我现在无法轻松访问gcc,所以我还没有尝试过)。有人知道为什么吗?templateclassbase{public:typedeftypenamederived_t::value_typevalue_type;value_typefoo(){returnstatic_cast(this)->foo();}};templa

c++ - 将 'typedef' 从基础类传播到 'template' 的派生类

我正在尝试定义仅包含typedef的基类。templateclassA{public:typedefstd::vectorVec_t;};templateclassB:publicA{private:Vec_tv;//fails-Vec_tisnotrecognized};为什么在B中收到Vec_t无法识别的错误,我需要显式编写?typenameA::Vec_tv; 最佳答案 我相信这个问题是重复的,但我现在找不到。C++标准说您应该根据14.6.2/3完全限定名称:Inthedefinitionofaclasstemplateor

c - time_t 最终的 typedef 是什么?

我搜索了我的Linux机器并看到了这个typedef:typedef__time_ttime_t;但我找不到__time_t定义。 最佳答案 time_tWikipediaarticle文章对此有所了解。底线是time_t的类型在C规范中是没有保证的。Thetime_tdatatypeisadatatypeintheISOClibrarydefinedforstoringsystemtimevalues.Suchvaluesarereturnedfromthestandardtime()libraryfunction.Thistyp

c++ - 我什么时候应该在 C++ 中使用 typedef?

在我多年的C++(MFC)编程中,我从来没有觉得需要使用typedef,所以我真的不知道它是用来做什么的。我应该在哪里使用它?是否存在优先使用typedef的实际情况?或者这真的更像是一个特定于C的关键字? 最佳答案 模板元编程typedef对许多templatemetaprogramming来说是必要的任务——当一个类被视为“编译时类型函数”时,typedef用作“编译时类型值”以获取结果类型。例如。考虑一个将指针类型转换为其基类型的简单元函数:templatestructstrip_pointer_from;templatest

c++ - typedef 指针是个好主意吗?

我查看了一些代码并注意到约定是将指针类型转换为SomeStruct*进入typedefSomeStruct*pSomeStruct;这样做有什么好处吗? 最佳答案 当指针本身可以被视为一个“黑匣子”时,这可能是合适的,即一段内部表示应该与代码无关的数据。本质上,如果您的代码从不取消引用指针,而您只是将它传递给API函数(有时通过引用),那么typedef不仅会减少*s在你的代码中,但也建议程序员不要真正干预指针。如果需要,这也使得将来更改API变得更容易。例如,如果您更改为使用ID而不是指针(反之亦然),现有代码不会中断,因为从一开

c++ - 如何 typedef 模板类?

这个问题在这里已经有了答案:C++templatetypedef(1个回答)关闭8年前。我应该如何typedef一个templateclass?比如:typedefstd::vectormyVector;//我知道两种方法:(1)#definemyVectorstd::vector//notsogood(2)templatestructmyVector{typedefstd::vectortype;};//verbose我们在C++0x中有什么更好的吗? 最佳答案 是的。它被称为“aliastemplate”,是C++11中的一个新

c++ - 这个 typedef 语句是什么意思?

在C++引用页面中,他们提供了一些typedef示例,我试图理解它们的含义。//simpletypedeftypedefunsignedlongmylong;//morecomplicatedtypedeftypedefintint_t,*intp_t,(&fp)(int,mylong),arr_t[10];所以我理解的简单typedef(第一个声明)。但是他们用第二个(下面重复)声明了什么?typedefintint_t,*intp_t,(&fp)(int,ulong),arr_t[10];(&fp)(int,mylong)具体是什么意思? 最佳答案

c++ - 为什么每个人都对标准 C 类型进行 typedef?

如果您想使用Qt,你要拥抱quint8,quint16等等。如果你想使用GLib,你要欢迎guint8,guint16等等。开启Linux有u32,s16等等。uC/OS定义SINT32,UINT16等等。如果你必须使用这些东西的某种组合,你最好为麻烦做好准备。因为在你的机器上u32将是typedef超过long和quint32将是typedef超过int并且编译器会提示。如果有,为什么每个人都这样做?这是图书馆的某种传统吗? 最佳答案 stdint.h在开发这些库时并不存在。所以每个库都有自己的typedefs。

objective-c - Objective-C 中的 typedef 枚举是什么?

我认为我根本不了解enum是什么,以及何时使用它。例如:typedefenum{kCircle,kRectangle,kOblateSpheroid}ShapeType;这里真正声明了什么? 最佳答案 这里声明了三件事:声明了一个匿名枚举类型,ShapeType声明了该匿名枚举的typedef,以及三个名称kCircle、kRectangle和kOblateSpheroid被声明为整数常量。让我们分解一下。在最简单的情况下,可以将枚举声明为enumtagname{...};这声明了一个带有标签tagname的枚举。在C和Object