在C++中是否可以创建模板类的别名(不指定参数)?typedefstd::mapmyOwnMap;不起作用。如果不是,有什么好的理由吗? 最佳答案 在C++98和C++03中,typedef只能用于完整类型:typedefstd::mapIntToIntMap;在C++0x中,有一个新的语法来替代typedef:usingIntToIntMap=std::map;它也支持template别名:template,typenameAllocator=std::allocator>>usingmyOwnMap=std::map;给你:)
我想在各种地方使用模板化的typedef,尤其是在声明自身模板化函数时。这是我目前的尝试templatestructtype{typedefstd::vectorsometype;}templatevoidsomeFunction(type::sometype&myArg);(注意std::vector只是一个例子)。这不起作用并给出编译器错误“'voidsomeFunction'的模板声明”。我已经知道我需要放一个typename在type前,即templatevoidsomeFunction(typenametype::sometype&myArg);有效。但至少可以说,这个解决方
我想使用模板定义一个函数指针类型。但是,VS2013我认为“typedef模板是非法的”。我想写这样的东西:templatetypedefvoid(*FuncPtr)(void*object,SD*data);不幸的是,这无法编译。我想保持简短。基本上我需要为一个函数指针定义一个类型,它的参数是一个模板类。 最佳答案 自C++11起,您可以使用using关键字的效果非常像typedef,它允许模板:templateusingFuncPtr=void(*)(void*,SD*);在此之前,您必须将模板与typedef分开:templa
假设我有一个std::vector的std::string//Foo.hclassFoo{std::vectormVectorOfFiles;}然后我用了typedef使其成为StringVector类型。//Foo.htypedefstd::vectorStringVector;classFoo{StringVectormVectorOfFiles;}如果我有另一个需要StringVector的类(class)对象...//Bar.hclassBar{Bar(constStringVector&pVectorOfFiles);//Iassumethisproducesacompile
假设我有以下代码(一个简单的CRTP类层次结构)。我想对基类类型进行typedef以节省自己的输入(在我的实际代码中,我多次使用基类类型并且基类采用多个模板参数),并且我需要与基类交friend,因为我想保留实现私有(private)。templateclassBase{public:voidfoo(){*static_cast(this)->foo_i();}};templateclassDerived:publicBase>{public:typedefclassBase>BaseType;private://Thishereistheoffendinglinefriendclas
假设我typedef一个整数或整数数组或任何已知类型:typedefintint2然后我为int2对重载运算符*,现在如果我将变量a和b初始化为int。那么我在a和b之间的*会是重载的*吗?我如何实现重载一个int,同时又按原样使用*作为int。我应该创建一个新类型吗? 最佳答案 假设您在谈论C++:运算符重载必须至少采用一个用户定义类型的参数。typedef没有改变任何东西,因为它没有引入新类型,只是提供了一个同义词。 关于c++-C++中的typedef和运算符重载,我们在Stack
我想定义一个类型取决于某些条件的变量。我想要这样的东西:typedeftypenameenable_if::typeType;typedeftypenameenable_if::typeType;但是编译器说我重新定义了类型。我该怎么做? 最佳答案 CanIuseenable_iftogetherwithtypedef?不,你不能。std::enable_if如果条件为假,则保留类型未定义。只有条件为真,成员type才被定义;templatestructenable_if;IfBistrue,std::enable_ifhasapu
编辑:发现duplicate我已将一些问题代码缩减为最简单的工作案例以说明以下内容:我在纯抽象基类中的typedef未被派生类继承。在下面的代码中,我想继承system_ttypedef到ConcreteTemplateMethod:#include//pureabstracttemplate-methodtemplate//T==AnalyzerclassTemplateMethod{public:typedefTsystem_t;virtualvoidfn(constsystem_t&t)const=0;};templateclassAnalyzer{public:voidTemp
是来自的类型(例如int16_t、uint_fast64_t、int_least8_t)保证为typedefs表示其中一种内置类型,例如short,unsignedlong等等?或者是否允许实现使用非通常内置类型的类型来实现固定宽度类型? 最佳答案 不,至少对于类型intN_t不是。这些类型保证具有二进制补码表示(根据C997.18.1.1,C++11和C++14引用)。标准整数类型不必是二进制补码。C11相对于C99也有重要的变化(实际上只是bugfix),强调上面的一点:7.20.1.1/3:However,ifanimplem
我正在尝试自动解析任意C++或C项目中的typedef。因为一些typedef是在系统头文件中定义的(例如uint32),我目前正试图通过在我的代码文件上运行gcc预处理器然后扫描预处理文件来实现这一点对于typedef。然后我应该能够替换项目代码文件中的typedef。我想知道,是否还有另一种可能更简单的方法,我想念。你能想到一个吗?我想这样做的原因:我正在使用不同的工具从C/C++项目中提取代码指标。指标是基于方法的。提取指标后,我必须合并由不同工具生成的数据。问题是,其中一种工具可以解析typedef,而其他工具则不能。如果有用于方法参数类型的typedef,我会将指标映射到不同