我有继承自A的类B。classA{};classB:publicA{};我有三个对象。A*a=newA();A*a2=newB();B*b=newB();我想检查a是A类型的对象,a2是B类型的对象(不是A),b是B类型的对象。我试过输入比较,但没有给出正确答案。cout1cout1cout0cout0cout0cout1我尝试了动态转换,但出现了编译错误。B*derived=dynamic_cast(a);if(derived){cout(a2);if(derived){cout(b);if(derived){cout(a);^typename.cpp:31:34:error:can
如果我调用typeid并检索返回的type_info的地址:consttype_info*info=&(typeid(Something));typeid返回的对象的生命周期是多少?指向该对象的指针将保持多长时间有效? 最佳答案 无论实现如何实现它们,typeid表达式的结果都是左值,这些左值引用的对象的生命周期必须持续到程序结束。来自ISO/IEC14882:20035.2.8[expr.typeid]:Theresultofatypeidexpressionisanlvalue[...]Thelifetimeoftheobjec
为什么typeid(someType)不像sizeof(someType)那样是常量?出现这个问题是因为最近我尝试了类似的东西:templateclassFoo{static_assert(typeid(T)==typeid(Bar)||typeid(T)==typeid(FooBar));};而且我很好奇为什么编译器在编译时知道类型的大小(sizeof),但不知道类型本身(typeid) 最佳答案 当您处理类型时,您宁愿使用简单的元编程技术:#includetemplatevoidFoo(){static_assert((std:
在C++中,我可以使用typeid运算符来检索任何多态类的名称:constchar*name=typeid(CMyClass).name();返回的constchar*指针指向的字符串对我的程序可用多长时间? 最佳答案 只要带有rtti的类存在。因此,如果您处理单个可执行文件-永远。但是对于动态链接库中的类,它会发生一点变化。可能你可以卸载它。 关于c++-指向typeinfo::name()的内存的生命周期是多少?,我们在StackOverflow上找到一个类似的问题:
cout在我看来,这应该返回int&作为类型,而不是int,但是在GCC4.5.1和VS2010SP1beta上它返回整数。这是为什么? 最佳答案 这就是typeid应该如何工作的。当您将typeid应用于引用类型的type-id时,type_info对象引用引用的类型。ISO/IEC14882:2003,5.2.8/4[expr.typeid]:Whentypeidisappliedtoatype-id,theresultreferstoatype_infoobjectrepresentingthetypeofthetype-id
如何在C++中模拟C#typeof-command行为?C#示例:publicstaticPluginNodeListGetPlugins(Typetype){...}调用:PluginManager.GetPlugins(typeof(IPlugin))如何使用C++实现这个?也许QT或Boost库提供了解决方案?如果您想以一种从文件(.so或.dll)加载这些类型的对象的方式实现.GetPlugins(...),情况会怎样? 最佳答案 您可以使用dynamic_cast来测试类型,如下所示:IPlugin*iPluginPtr=
编译器:TDM-GCC-5.1.0(SJLJ展开)我在玩declval时发现我无法在它应该工作的上下文中使用它:作为typeid()的参数。在以下代码中,我将declval用于其主要用例之一:无需通过实例即可获取方法的返回类型。我得到的错误是declval的static_assert消息,但这应该是不可能的,因为在这种情况下typeid()不会评估它的参数:#include#includestructFoo{intfunc();};intmain(){typeid(std::declval().func());}这不会为我编译(当使用-std=c++14编译时)。我唯一的猜测是我发现了
我正试图在C++中实现某种机制,从而为从公共(public)基类派生的所有类分配一个唯一的“类ID”。例如:classBaseClass{//...public:unsignedintGetID(void);//...};classDerivedClass:publicBaseClass{}DerivedClass类和BaseClass的所有其他子类应该能够返回唯一标识符,而无需向DerivedClass添加任何额外代码……然而,C++使这对我来说相当困难。任何想法将不胜感激。提前致谢!---丹 最佳答案 你应该听听Alf的话:)这
我想知道Qt是否提供了typeid的替代方法来识别变量类型并以人类可读的格式获取它们的名称。我的具体问题如下:structgArgument{QStringtype;void*arg;};voidgargConverter(gArgument*oArg,Tdata){oArg->type=typeid(data).name();oArg->arg=static_cast(&data);}这个想法是泛化一个变量以用作函数的输入。作为侧节点tyeinfo似乎无法在我的系统上正常工作(我在Windows7上使用MinGW),如果我尝试:inti;std::cout我明白了i7QStringd
在C++中,我可以使用typeid运算符来检索任何多态类的名称:constchar*name=typeid(CMyClass).name();返回的constchar*指向的字符串willbeavailabletomyprogramforaslongasthecorrespondingclassexists.typeid(T).name()的多次调用是否会为相同的classT返回相同的指针值,或者它们是否允许返回不同的指针? 最佳答案 不,它们不需要返回相同的指针。我在野外系统也看到过没有。每个DLL都有自己的包含nmae的类型对象