草庐IT

pseudo-typedef

全部标签

c++ - typedef 别名的析构函数

#includestructA{~A();};A::~A(){std::cout上述程序的输出为:Destructorwascalled!Destructorwascalled!Destructorwascalled!我假设前两行属于用户析构函数调用,而第三行是由于退出main函数范围时调用析构函数。据我了解,typedef是类型的别名。在这种情况下,AB是A的别名。为什么这也适用于析构函数的名称?非常感谢您引用语言规范。编辑:这是在macOSHighSierra版本10.13.3上使用AppleLLVM版本9.1.0(clang-902.0.39.1)编译的。

c++ - ERROR : "dependent name is not a type". 当在类中使用 typedef 类型作为返回值时,带有模板

templateclassbag{public://TYPEDEFtypedefsize_tsize_type;typedefItemvalue_type;...}当我使用时templatebag::size_typebag::count(constItem&target)constVC++报错为Source.cpp(207):警告C4346:'bag::size_type':从属名称不是类型谁能告诉我为什么?谢谢! 最佳答案 应该是templatetypenamebag::size_typebag::count(constItem

android - 如何在 kotlin 中使用 Android Support typedef 注解?

我开发Android应用,经常使用注解作为编译时参数检查,主要是android的supportannotations.java代码示例:publicclassTest{@IntDef({Speed.SLOW,Speed.NORMAL,Speed.FAST})public@interfaceSpeed{publicstaticfinalintSLOW=0;publicstaticfinalintNORMAL=1;publicstaticfinalintFAST=2;}@Speedprivateintspeed;publicvoidsetSpeed(@Speedintspeed){this

c++ - 如何在编译时检查两种类型是否相同(如果它与 Boost strong typedef 一起使用则加分)

我想知道是否可以在编译时检查两种类型是否相同。我想出的是(idk如果它有效,因为它感觉hackish和IDK标准那么好,所以IDK在测试时要寻找什么)。#includeBOOST_STRONG_TYPEDEF(double,cm);BOOST_STRONG_TYPEDEF(double,inch);templatestaticconstexprvoid__help(){}templateclassAreSameType{public:constexproperatorbool(){return&__help==&__help;};};用法:intmain(){static_assert

c++ - `typedef typename Foo<T>::Bar Bar'的模板声明

我在声明模板类型时遇到了很大的困难,如下所示。#include#includeusingnamespacestd;templateclassFoo{typedefTBar;};templatetypedeftypenameFoo::BarBar;intmain(intargc,char*argv[]){Barbar;Foofoo;system("PAUSE");returnEXIT_SUCCESS;}我得到错误templatedeclarationof`typedeftypenameFoo::BarBar'关于线路templatetypedeftypenameFoo::BarBar;我

c++ - 函数体内的 typedef 是一种不好的编程习惯吗?

我有一些类C并希望将其实例和方法的地址传递给测试函数Test_C_Foo1()中的某个仿函数。Functor是一个模板类,我必须提供类方法的类型(MEMFN1)作为其模板参数之一。我必须在某处定义MEMFN1类型,但不想更改C.h并且不想用它污染全局命名空间。我决定尽可能将typedef本地化,所以把它放在一个测试函数中——在MEMFN1实际使用的范围内。在函数体内使用typedef是一种好习惯吗?标准允许在函数体内使用typedef,仅在以下特定情况下限制它:Thetypedefspecifiershallnotbecombinedinadecl-specifier-seqwitha

c++ - 可以使用 C++11 decltype 为现有函数的函数指针创建 typedef 吗?

给定structA{intfoo(doublea,std::string&b)const;};我可以像这样创建一个成员函数指针:typedefint(A::*PFN_FOO)(double,std::string&)const;很简单,只是如果A::foo的签名发生变化,则需要更新PFN_FOO。由于C++11引入了decltype,是否可以用来自动推导出签名并创建typedef? 最佳答案 是的,当然:typedefdecltype(&A::foo)PFN_FOO;您也可以通过using定义类型别名关键字(感谢MatthieuM.

c++ - typedef 声明中的 typedef-name 是可选的吗?

当我看到以下代码在g++-4.2中编译时没有错误或警告时,我感到非常惊讶:typedefenumtest{one};我的假设是,如果您使用typedef关键字,它将需要一个额外的标识符,如:typedefenumtest{one}test;如前所述,g++-4.2甚至在没有警告的情况下接受它。Clang++3.0警告“warning:typedefrequiresaname”,类似地Comeau警告“warning:declarationrequiresatypedefname”,g++-4.6通知:“warning:'typedef'在此声明中被忽略"。我无法确定标准中允许这样做的位

c++ - 是否存在绝对需要 typedef 的情况?

考虑以下safeboolidiom的摘录:typedefvoid(Testable::*bool_type)()const;operatorbool_type()const;是否可以在没有typedef的情况下声明转换函数?以下不编译:operator(void(Testable::*)()const)()const; 最佳答案 啊,我只记得identity元函数。可以写operatortypenameidentity::type()const;identity的定义如下:templatestructidentity{typedef

c++ - 为什么 C++ 中的类型别名在其语法中使用 'using' 而不是 'typedef'?

显然,类型别名和模板化类型别名在语义上等同于typedef和typedef的扩展以支持模板。为什么会为这些创建带有using关键字的新语法,而不是使用typedefs作为第一个和一些带有单词typedef的语法扩展。注意:这不是“使用和typedef之间的区别”问题的克隆。我知道using具有定义一系列typedef的优势。我要问的是为什么标准的人决定让这个扩展使用using关键字而不是typedef关键字。这似乎只是增加了语言的困惑。 最佳答案 这里是BjarneStroustrup说他们为什么介绍using而不是扩展typede