草庐IT

typeInfo

全部标签

c# - 类不继承自对象?

我正在研究一种使用反射来检查方法的参数类型的方法。此方法遍历ParameterInfo并使用这些参数的类型执行某些操作。我一直假设如果TypeInfo.IsClass为true,则此类型是一个类并且始终(间接)派生​​自类型object(当然,当类型是object本身时除外)。因此,如果TypeInfo.IsClass为真,则必须设置TypeInfo.BaseType。好吧,我的假设是错误的!有些类不是从object类型派生的。我的假设搞砸了我的代码。例如:Typetype=typeof(int).MakeByRefType();type.IsClass将为true并且type.Bas

c# - 如何从 WinRT 中的 TypeInfo 获取类型?

按照惯例,我想注册我所有的View模型以进行序列化。但是下面的代码将无法编译,因为foreach循环中的varviewmodel是TypeInfo类型:protectedoverridevoidOnRegisterKnownTypesForSerialization(){varviewModels=this.GetType().GetTypeInfo().Assembly.DefinedTypes.Where(t=>_viewModelNameRegex.IsMatch(t.FullName)).ToList();foreach(varviewmodelinviewModels){Se

C# ITypeInfo.GetContainingTypeLib 在传递 VBA 类的实时实例时失败

所以我尝试在VBA类实例上调用ITypeInfo,虽然它看起来很有希望,但我想看看我是否可以获得对其包含项目的引用,类似于类型库。我认为ITypeInfo.GetContainingTypeLib可能有用,但它会抛出一个异常,表明VBA不会合作。有人知道VBA如何以不同于标准COM规范的方式做事吗?C#类库代码在这里。注册COM互操作并在AssemblyInfo.cs中设置COMVisible(true)以使其可从VBA访问。下面给出了VBA客户端代码。usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Runtime

c# - 从 TypeInfo 对象获取类型的完全限定名称

是否有可能以某种方式获取TypeInfo对象中包含的类型的完全限定名称?在调试器中,许多这些值很好地显示为System.Int32,但是当它被打印出来时,没有一个包含这个完全限定的名称。我需要将其作为参数提供给Type.GetType()。vartypeInfo=semanticModel.GetTypeInfo(argument);varw=typeInfo.ToString();//Microsoft.CodeAnalysis.TypeInfovary=typeInfo.Type.ToString();//intvarz=typeInfo.Type.ToDisplayString(

c++ - 我们能否在运行时确定两个 type_info 是否可转换?

有没有办法从两个const::std::type_info中判断对象,让我们将它们命名为B和D如果D描述的类型是从类型B派生的?我问是因为我想删除我得到的对象的类型,但稍后能够检查它是否可以安全地提升。void*data;const::std::type_info*D;templatevoidstore(D&&object){D=&typeid(object);data=::std::addressof(object);}templateB&load(){//if(typeid(B)!=(*D))throw::std::bad_cast{};return*reinterpret_cas

c++ - 如何获取C++11参数包中的类型?

我不确定我是否以最有效的方式对问题进行了措辞,但我现在才刚刚开始使用C++11,并且无法将其新功能应用于手头的问题。我有以下名义功能:templatestd::vectorfoo()我想要foo()返回vector包含type_index参数包中每种类型的值Args.例如,foo,double>()会返回vector包含{type_index(typeid(int)),type_index(typeid(vector)),type_index(typeid(double))}.理论上,我想遍历包中的类型并对它们中的每一个调用上述转换(即给定类型T,返回type_index(typeid

c++ - 在 C++ 中的编译时获取类型名称

这个问题在这里已经有了答案:CanIobtainC++typenamesinaconstexprway?(3个答案)关闭去年。我想获取类型名称并将其打印出来以用于调试目的。我使用以下代码:#includeinlineconstchar*demangle(constchar*s){abi::__cxa_demangle(s,0,0,NULL);}templateinlineconstchar*type_name(){returndemangle(typeid(T).name());}它运行良好,但我认为它有不必要的运行时开销。有没有办法获得在编译时计算的人类可读形式的类型id?我正在考虑

c++ - 在 GCC 中,如何在不导出所有符号的情况下导出共享库的所有类型信息符号?

问题是:我有一个默认隐藏符号的共享库。实际上,它使用-Xlinker--version-script=选项导出特定文件中的一些符号,但隐藏所有其余符号。问题是,如果我们试图捕获在其他共享库中定义的异常,我们就会遇到问题,因为类型信息被这个共享库隐藏了。我无法明确地使异常类可见,因为它们是在我无法控制的开源库中定义的。我也不想在版本脚本符号文件中明确列出异常类的类型信息的损坏名称,因为有许多开发人员在这个库上工作,他们一定会忘记为future。我尝试在开源.hpp文件之前使用#pragmaGCCvisibilitypush(默认),但它似乎没有用-符号不可见。我也尝试过使用-fvisib

c++ - typeid 运算符返回的对象的生命周期是多少?

如果我调用typeid并检索返回的type_info的地址:consttype_info*info=&(typeid(Something));typeid返回的对象的生命周期是多少?指向该对象的指针将保持多长时间有效? 最佳答案 无论实现如何实现它们,typeid表达式的结果都是左值,这些左值引用的对象的生命周期必须持续到程序结束。来自ISO/IEC14882:20035.2.8[expr.typeid]:Theresultofatypeidexpressionisanlvalue[...]Thelifetimeoftheobjec

c++ - 指向 typeinfo::name() 的内存的生命周期是多少?

在C++中,我可以使用typeid运算符来检索任何多态类的名称:constchar*name=typeid(CMyClass).name();返回的constchar*指针指向的字符串对我的程序可用多长时间? 最佳答案 只要带有rtti的类存在。因此,如果您处理单个可执行文件-永远。但是对于动态链接库中的类,它会发生一点变化。可能你可以卸载它。 关于c++-指向typeinfo::name()的内存的生命周期是多少?,我们在StackOverflow上找到一个类似的问题: