草庐IT

c++ - 拼图 : To escape the check of typeid

我偶然形成了一个很好的面试问题。:)templateboolfoo(Tobj){if(typeid(T)==typeid(obj))returnfalse;returntrue;//您必须以返回true的方式调用(仅在上面提到的)foo()。条件是,无法编辑或重载foo()或typeid不允许针对特定平台进行黑客攻击不允许#define 最佳答案 #includestructB{virtual~B(){}};intmain(){struct:B{}x;assert(foo(x));}行动是overthere.

c++ - 使用 typeid 在派生类之间进行比较

我有一个指向用户插入的派生对象的指针vector(所以我猜正确的术语是“仅在运行时已知”)::vectorvect;派生类是Male和Female。我想对vector进行迭代以仅选择Female对象并调用它的复制构造函数。我想到了3个解决方案:使用旗帜;使用typeid在Female的默认构造函数中插入对复制构造函数的调用,以便每次用户创建一个时,自动创建双胞胎。对于许多类型的派生类,我不喜欢第一个选项。我也不喜欢第三种选择,因为会导致关系问题(世界了解每个女性,但女性无法了解世界)。所以我应该使用第二个选项:例子typeid(vect.at(i))==typeid(Female)这个

c++ - typeid(T) 是在运行时还是编译时求值?

我无法在任何地方找到这个看似简单的问题的答案。下面的C++函数是否使用了RTTI?它当然不必,但我想知道是否可以保证在编译时确定typeid。templateconstchar*getName(){returntypeid(T).name();//Resolvedatcompiletime?} 最佳答案 由于typeid应用于类型而不是对象,没有运行时类型信息,因此开销不会成为问题。另一方面:据我所知,该标准对何时确定值没有任何要求,因此不能保证没有运行时开销。编辑:当然,(可能)没有保证的事实并不意味着它不是一个合理的假设。我无法

c++ - 如何在 C++ 中删除与 typeid( ).name( ) 关联的数字?

我有一个工厂方法类,它生成“Items”并返回指向它创建的Item的指针。我有Item的派生类。例如,Item可以是“武器”、“消耗品”或“盔甲”。我需要检测创建了哪种类型的项目,以便我可以将项目正确地转换为该类型。我做了一些测试线,看起来它正在做我想要的,除了添加与类型关联的数字。示例:我有这条线:cout它返回基类Item,但它会显示:“4Item”然后我将其更改为:cout这会给我正确的派生类型,但也会抛出那个数字。所以我得到类似“5Armor”的东西为什么pItem返回基类?为什么它返回一个类型为int的值?我怎样才能删除int?做我想做的事情的解决方案——以一种“作弊”的方式

ios - 使用对象属性从 NSArray 中过滤重复项

我有一个包含Order对象列表的NSArray,一个Order对象具有三个属性(id、typeID和description),我想根据typeID过滤我的数组以排除重复项。重复项由typeID确定,例如,如果有2个typeID=7的项目,那么我想选择具有最大id的订单,所以在这种情况下它将是=>id=2。我的带有Order对象的src数组:Item1:id=1,typeID=7,description="sometext1"Item2:id=2,typeID=7,description="sometext2"Item3:id=3,typeID=5,description="somete

当类型为参数时,如何避免typeID

我正在研究一个物理项目模拟,我需要计算2个分子的潜力。这是我想编写的代码的一部分:classMolecule{public:doublesomeBulshit;virutaldoublePotential(constMolecule&mol);}classLC:publicMolecule{public:virtualdoublePotential(constMolecule&mol){if(typeid(mol)==typeid(LC))return1;//fortheexamplereturn3;}}classCol:publicMolecule{public:virtualdoubleP

c++ - 在多态对象上使用 typeid 时,必须定义它吗?

在多态对象上使用typeid时,我认为必须定义对象(而不仅仅是声明),因为typeid操作需要获取对象的信息在运行时。这是我的代码:#include#includeclassD{virtual~D(){}};externDd;intmain(){std::cout还有clang3.4,我收到链接错误:undefinedreferenceto`d'但是用g++4.8.1,效果很好,我得到了结果:1D8我的问题:哪个是正确的?g++是如何实现typeid的?它如何从没有定义的多态对象中获取信息? 最佳答案 来自http://en.cpp

c++ - 如何识别变量的类型

我如何正确识别C++中的变量类型。我试过这个来识别一种变量:inta=5;std::cout它给你的不是预期的输出int,而是:i我很困惑为什么会这样。它以某种方式只给你声明变量类型的第一个字母。Int不是唯一的……还有这个:chara='A'std::coutExampleProgram有没有简单的解决方法?任何帮助将不胜感激! 最佳答案 你的代码有两个问题,首先typeid(..).name()返回一个实现定义的字符串,它可以是任何有效的字符串,它可以返回""对于每种类型,它甚至可以为每个程序执行返回不同的值(尽管我相信该值在执

编译时的 C++ 类型标识

我想在编译时根据派生类型为类生成哈希。今天我生成它如下:templateclassTypeBase{public:staticconstunsigneds_kID;};templateconstunsignedTypeBase::s_kID=hash(typeid(Type));但这会生成(非常不必要的)运行时初始化代码(hash(..)函数基于std::type_info::name()进行简单的散列)想法? 最佳答案 考虑到进程启动时发生的所有其他事情,以及您现有代码的简单和优雅,假设您不对大量类型进行哈希处理,我将保留您现有的

c++ - 在 C++ 中,检查一个基类的两个实例是否属于同一个子类

下面的代码解释了这个问题。填写same_sub_class检测是否指向虚拟基类A的两个指针实际上是相同的具体类。structA{...}:structB:publicA{...}:structC:publicA{...}boolsame_sub_class(A*a1,A*a2){//Fillthisintoreturntrueifa1anda2are//ofthesameconcreteclass}编辑:当我查看我的应用程序时,我需要一些与上面略有不同的东西。我需要能够按type_id对实例进行分组。仅供引用。我有一个迷你符号代数系统,因此要进行操作,有时了解类类型对于排序和重新排列表