草庐IT

pseudo-typedef

全部标签

c++ - typedef 和显式实例化之间的代码重复

树.htemplateclassbinary_operation:publicnode{//...unimportantdetails...unsignedevaluate()const;voidprint(std::ostream&os)const;};typedefbinary_operation,'+'>addition;typedefbinary_operation,'*'>multiplication;//...树.cpptemplateunsignedbinary_operation::evaluate()const{//...unimportantdetails...}t

C++检查模板参数的嵌套typedef以获得其标量基类型

考虑下面的指数平滑器模板类。此类用于以指数方式平滑/过滤顺序数据(请参阅更新方法)。Elemtype可能是一个vector,而Floattype通常是一个标量。例如ExponentialSmootherx(0.1,Vector2f(0.5,0.5));在这个例子中,第二个模板参数Floattype可以避免,因为Eigen的Matrix类包含一个嵌套的typedef来获取标量基类型:Vector2f::Scalar将Elemtype和Floatype都实例化为float来平滑一维数据也是合理的。在这种情况下,也可以跳过第二个模板参数。templateclassExponentialSmo

c++ - 使用 typedeffing 模板化基类来简化代码是一种好习惯吗?

最近在处理许多模板化类并从它们派生时,我发现自己“发明”了这个简单的结构。我不确定这是常见做法,还是我在脖子上系了一根绳子。templateclassBase{};templateclassDerived:publicBase{typedefBaseBase;};我发现如果Base它特别有用类有自己的typedefs对于某些类型。例如:templateclassBase{typedefTScalar;typedefMatrixMatrix;};然后很容易将类型“导入”到Derived中.它节省了重新键入模板签名。例如:templateclassDerived:publicBase{ty

c++ - typedef type * type::* ,它是什么?

我有以下代码:structmyType{myType*ptr;};typedefmyType*myType::*other_type;第二行typedef'ining是什么?这是一个返回myType指针或其他东西的成员函数吗? 最佳答案 将other_type定义为指向myType成员的指针,其中所述成员本身是指向myType的指针。例如,您可以这样使用它:other_typex=&myType::ptr;myTypemine;mine.*x=&mine;为什么你会这样做,我不能说。 关

c++ - typedef a std::string - 最佳实践

我正在用标准C++编写一个库来进行语音转换。到目前为止,我已经使用了std::string。但将来我可能不得不将其更改为其他内容(std::wstring或其他内容)。所以我需要以一种可以轻松切换的方式编写我的库。到目前为止,我已经完成了以下工作。创建了一个将被所有CPP文件使用的头文件为此添加了“typedefstd::string”,并在文件中各处使用了新名称。如果我需要改变类型,我可以简单地在头文件中改变,它会在所有地方反射(reflect)出来。如果有人能看出这是正确的方法或者有更好的方法来做到这一点,我将不胜感激?谢谢 最佳答案

c++ - 检测并报告 typedef 错误……这是在做什么?

我正在阅读有关通过使用固定宽度整数使代码更具可移植性的内容。我找到了this帮助解释事情的文章,最后它建议使用这个匿名union来检测和报告typedef错误:staticunion{charint8_t_incorrect[sizeof(int8_t)==1];charuint8_t_incorrect[sizeof(uint8_t)==1];charint16_t_incorrect[sizeof(int16_t)==2];charuint16_t_incorrect[sizeof(uint16_t)==2];charint32_t_incorrect[sizeof(int32_t

c++ - 为什么我的 Curiously Recurring Template Pattern (CRTP) 不能引用派生类的 typedef?

这个问题在这里已经有了答案:C++staticpolymorphism(CRTP)andusingtypedefsfromderivedclasses(5个答案)关闭9年前。使用curiouslyrecurringtemplatepattern时,如果我试图从基类中引用属于派生类的typedef,则仅无法引用它们;gcc提示notypenamed'myType'inclassDerived.这似乎与使用typedef、模板和奇怪的重复关系的其他方式不一致。考虑:/*crtp.cpp*/#includeusingnamespacestd;//case1.simple.classBase{

C++ - 前向声明和别名(使用 using 或 typedef)

我需要实现如下接口(interface)structmutex;structinterface{//...mutex&getMutex();};直觉我可以使用usingmutex=ParticularMutex在我的实现中,但gcc告诉我的不是这样:error:conflictingdeclaration‘usingmutex=’error:‘classmutex’hasapreviousdeclarationas‘classmutex’我没有定义任何东西两次,只是声明两次,就像前向声明时一样,所以为什么这行不通?有没有不修改interface的解决方法??应该如何interface被

c++ - 是否可以根据模板类型参数的嵌套 typedef 的存在来专门化模板定义?

我有一个模板,templateclasswrapper,我想根据typenameT::context_type的存在进行专攻.如果typenameT::context_type被声明,然后wrapper的构造函数和赋值运算符重载实例化应该接受强制typenameT::context_type范围。此外,wrapper对象将在成员数据中存储“上下文”。如果typenameT::context_type不存在,则重载wrapper的构造函数和赋值运算符将减少一个参数,并且不会有额外的数据成员。这可能吗?我可以在不更改config1的定义的情况下编译以下代码吗?,config2,和main(

c++ - 应该用 typedef 触发 static_assert 吗?

我注意到当实例化为typedef时,类模板中的静态断言不会被触发。#includetemplatestructtest_assert{static_assert(std::is_same::value,"shouldfail");};typedeftest_assertt;这段代码编译没有错误。如果我尝试创建一个实例,则断言失败:tobj;//error:staticassertionfailed:"shouldfail"最后,如果我将条件替换为false,即使我不实例化类模板,断言也会失败:templatestructtest_assert{static_assert(false,"