草庐IT

pseudo-typedef

全部标签

c++ - 为什么要使用 C++ Typedef?

我对typedef的理解是给一个声明一个别名。这样的int声明现在将称为Integer。但为什么?为什么有人会使用typedef?更有利的原因是什么?typedefintInteger;Integerblamo=50;cout 最佳答案 这不是一个很好的例子,因为Integer和int没有任何不同的含义。但想象一下,typedefintBlamoType;现在,将来当'blamo'变成一个64位整数时,你可以只改变这个typedef,所有其他代码保持不变。typedef的另一个原因是缩短类型名称。例如代替boost::shared_

c++ - 使用 typedef'd uint 会导致错误,而 "unsigned int"不会...?

出于某种原因,当我在我的程序中将变量定义为“uint”而不是“unsignedint”时,它会出错。这看起来很奇怪,因为uint被定义为:typedefunsignedintuint;...所以我认为我可以互换使用这两者。更确切地说,我将返回“unsignedint”的函数的结果分配给一个uint变量,然后在vector调整大小调用中使用该uint...此时出错。即,我的代码看起来像这样:unsignedintgetUInt(){return3;}intmain(void){vector>vectVect(100000);for(uinti=0;i&myVect=vectVect[i]

c++ - Friend 类、继承和 typedef——哪种行为是正确的?

我偶然发现了一个错误,该错误仅在GCC6.2.0上出现,但在Clang3.9.0上没有出现(均在-std=c++14模式下)。我不确定哪种行为是正确的(以及我是否应该提交错误)。代码如下:templateclassfoo_t{};classbar_t{public:usingfoo_t=int;};classbaz_t:publicbar_t{private:templatefriendclassfoo_t;};在GCC上,这会产生以下错误:test.cpp:17:15:error:usingtypedef-name‘usingfoo_t=int’after‘class’friendc

c++ - 为什么不允许前向声明将是 typedef 的类?

如果我想使用一个指向类的指针并且不对其进行任何操作,我们可以前向声明该类。但如果那恰好是一个typedef,为什么不允许呢?在下面的示例中,它仅编译我包含注释代码,但为什么编译器此时想知道它?我如何转发声明可能是typedef的内容。c++0x中的这种行为有什么变化吗?#includeusingnamespacestd;/*templateclasstemp;typedeftemplater;*/classlater;voidsomefunc(later*);intmain(){later*l;somefunc(l);return0;}//Thefollowingisinsomeoth

c++ - 为什么更喜欢基于模板的静态断言而不是基于 typedef 的静态断言?

有两个widelyused没有内置static_assert的C++版本的静态断言实现。第一个在Boost中使用,使用atemplateandaspecializationofthattemplate:templatestructstatic_assert;templatestructstatic_assert{};//onlytrueisdefined#defineSTATIC_ASSERT(x)static_assert()这里,一旦要检查的条件为假,编译器就无法找到模板的通用版本,编译失败。第二个使用typedef:#defineSTATIC_ASSERT(x)typedefch

c++ - Typedef 循环依赖

如何解决以下循环依赖?typedefboost::variantValue;typedefstd::list>Structure;typedefstd::vectorValueContainer;我正在尝试以更C++的形式表示来自Capi数据库的对象。该数据库允许存储值或值数组,以及具有结构表示,如下所示:typedefstructApiStructureMember{char*name;structApiValueContainervalue;structApiStructureMember_T*next;}ApiStructureMember_T;最后用一个union来表示一个值,

c++ - 为什么 'typedef' 这个词后面需要 'typename' 作为依赖类型?

依赖类型通常需要typename来告诉编译器成员是类型,而不是函数或变量。然而,情况并非总是如此。例如,基类不需要这个,因为它只能是一个类型:templatestructidentity{typedefTtype;}templateclassVector:identity>::type{};//notypename现在我的问题是,为什么typedef之后需要typename?templateclassVector{typedeftypename/*::iteratoriterator;}; 最佳答案 typedef不需要出现在类型之

c++ - 私有(private)继承的 typedef 对嵌套类的可见性

在下面的示例中(对长度表示歉意)我试图隔离一些我在从另一个私有(private)继承的类中使用嵌套类时遇到的意外行为。我经常看到这样的陈述:与非嵌套类相比,嵌套类没有什么特别之处,但在这个例子中,可以看到嵌套类(至少根据GCC4.4)可以看到一个公共(public)类型定义由关闭类私有(private)继承的类。我明白typdef与成员数据不同,但我发现这种行为令人惊讶,而且我想很多其他人也会这样。所以我的问题是双重的:这是标准行为吗?(对原因的合理解释会很有帮助)能否期望它适用于大多数现代编译器(即它的可移植性如何)?#includeclassBase{typedefintpriv_

c++ - 转发为模板类声明 typedef

这个问题在这里已经有了答案:ForwarddeclarationofatypedefinC++(11个答案)关闭8年前。我知道typedef不能在C++中前向声明,但我想知道以下问题的最佳解决方案是什么。我有一个声明MyClass的头文件,如下所示:#includestructMyStruct{//...}typedefReally::Long::TemplateClassNameMyClass;MyClass用在很多地方,但大多数只是作为通过Qt信号槽机制传递的指针。只需要一个前向声明,但由于MyClass是一个无法工作的typedef。有没有办法避免将myclass.h添加到使用指

c++ - typedef 和不完整的类型

最近,当我在代码中更改某些容器、分配器时,我遇到了很多关于typedef和不完整类型的问题。我以前有什么structfoo;//incompletetype.typedefstd::vectorall_foos;typedefall_foos::referencefoo_ref;虽然不能完全确定上述行是否合法,但这适用于我使用的每个实现。当我认为我可以用std::tr1::array完成这项工作时,把上面两行改成typedefstd::tr1::arrayall_foos;typedefall_foos::referencefoo_ref;这里一切都中断了,因为编译器试图实例化arra