草庐IT

pseudo-typedef

全部标签

c++ - 如何创建 typedef 结构的前向声明

我有1个包含类的.h文件test.h。在这个类中,有一个私有(private)方法返回一个类型的指针,我不想将其设为“公共(public)”,但我希望能够将此test.h文件包含在其他源文件中。一般来说,在.h文件中使用前向声明很容易:classFoo;但问题是这个类型来自一个C文件我不能改变(因为它是我不维护的其他人的代码)而且它是一个typedef.所以基本上我的test.cpp是://thistypecomesfromaCfile,cannotbechangedtostructorclasstypedefstruct{intx;}Foo;#include"test.h"stati

c++ - 为什么允许 std::atomic_{char,schar,etc.} typedef 是 std::atomic<T> 基类的类型定义,而不仅仅是 atomic<T>?

C++11[atomics.types.generic]p7:Thereshallbenamedtypescorrespondingtotheintegralspecializationsofatomic,asspecifiedinTable145,andanamedtypeatomic_boolcorrespondingtothespecifiedatomic.Eachnamedtypeisaeithertypedeftothecorrespondingspecializationorabaseclassofthecorrespondingspecialization.Ifitisa

c++ - C++ 标准是否允许使用 typedef 重命名构造函数?

我惊讶地发现在VC++10中,您可以使用typedef来更改类的构造函数的名称:#includeusingnamespacestd;classA{private:typedefAalias;public:alias(){cout这是标准C++还是Microsoft扩展? 最佳答案 没有;构造函数没有名字。您不能获取构造函数的地址或传递函数指针,甚至不能像普通函数一样调用它。语法A::A()只是一种特殊的声明符语法,允许您声明和定义构造函数,但它不是名称。就是说,无论如何,您不能对对象(包括函数指针)进行类型定义,只能类型。要评论MS

c++ - 是否可以将实现模板特化定义为另一种类型的 typedef?

我有一个类模板,我想为其引入几个模板特化。这些模板特化与某些现有类型相同。从概念上讲,我想将它们实现为别名/typedef。下面的示例代码应该显示我想要做什么:templateclassCommon{///generalimplementation};classTypeZ;templateclassCommon=TypeZ;//classCommon=TypeZ;templateclassCommon=TypeZ;在C++(或C++11)中,以上内容是否可以某种方式实现?如果我不必实现Common就好了作为继承TypeZ的类-实际代码比上面显示的更复杂并且继承了TypeZ这不是一个好主

c++ - BOOST_FOREACH 和没有 typedef 的模板

当我使用BOOST_FOREACH时,简单的模板作为vector没有问题。但是,当我尝试遍历map>例如,我需要对元素类型进行typedef。有什么解决方法吗? 最佳答案 有一个问题,因为它是一个宏,因此不能处理包含逗号的类型(预处理器不知道模板)。您也可以在循环之前声明变量,参见documentation.std::mapmy_map;//1)typedefstd::pairMyPair;BOOST_FOREACH(MyPairp,my_map){...}//2)std::pairp;BOOST_FOREACH(p,my_map)

c++ - typedef 如何用于函数指针

我想我可能患有可怕的“意外程序员”病,至少在涉及到typedef和函数指针时。所以我一直在试验涉及这些的各种组合,以根据我得到的所有输出来分析结果。但随着我不断尝试不同的组合,而不是分析结果,我现在只是迷失在过程中。我希望你们能帮我解决这个问题。第一个代码示例typedefvoid(print)(void);voiddo_something(void){printf("HelloWorld\n");}print*pr;pr=&do_something;pr();//HelloWorld第二个代码示例typedefvoid(print)(void);voiddo_something(vo

c++ - 通过 typedef 显式模板实例化

如果我有typedefFooFoof;为什么我不能像这样显式实例化模板templateclassFoof;除了输入Foo是否有解决方法?? 最佳答案 andisthereaworkaroundapartfromtypingFoo?不,不幸的是没有。您必须输入Foo.至于为什么,请参阅规则的C++标准的14.7.2条款3(虽然我不知道规则背后的基本原理)。 关于c++-通过typedef显式模板实例化,我们在StackOverflow上找到一个类似的问题: ht

c++ - 容器优化:为什么 STL 容器方法参数不再使用 allocator::const_reference typedef?

阅读之前:const_reference是typedef,不需要是constT&正如您在std::vector::const_reference=bool中看到的那样.请在阅读其余部分时牢记这一点以正确理解它(正如评论中所建议的那样,这对很多人来说很难)。我想为简单类型(例如int)使用STL容器,但发现它们使用了次优的constT&“反模式”-它适用于大类,但在未内联时对于简单/基本类型不是最优的-考虑嵌入式系统,例如在ARM/ATSAM4L上,带有实例化。问题是:为什么例如vector::push_back使用(constvalue_type&)的参数重新设计而不是自C++11以来

c++ - c++ typedef std::function<> 如何使用?

你好,我正在做这个项目,在头文件中定义了以下内容typedefstd::functionHashFunction;我如何将它与我的HashFunction一起使用?当我尝试HashFunctionmyHashFunction;myHashFunction("mystring");程序崩溃。 最佳答案 std::function类型的对象行为非常像一个函数指针,指向一个带有签名Signature的函数.默认构造std::function只是还没有指向任何函数。std::function之间的主要区别和一个函数指针Signature*是

c++ - 同名的 typedef 和模板参数

为什么这种情况不正确(这是合乎逻辑的)templatestructDer:publicBase{typedefintT;Tval;};,但这种情况是正确的吗?structBase{typedefintT;};templatestructDer:publicBase{Tval;};标准14.6.1/7说:Inthedefinitionofaclasstemplateorinthedefinitionofamemberofsuchatemplatethatappearsoutsideofthetemplatedefinition,foreachbaseclasswhichdoesnotde