c – 在运行时管理模板化函数的名称 – 可能吗?
假设我写了一个foo< T> function(我有一个带有命名空间的完整签名),但现在没关系);并假设没有其他函数重载它(在相关的命名空间中).现在让我们把自己放在运行时.假设我有字符串“foo”,对于某些类型MyType,我有typeid(MyType)(来自< memory>标头).
我可以以某种方式获取foo< MyType> ;?的符号名称吗? 这个问题的第二个版本:现在假设我将foo的完整签名作为字符串,而不仅仅是名称;并放弃没有超载的假设. 笔记: 解决方法
不,你不能.
要获取实例化函数模板的错位名称,最简单的情况是需要以下信息: >函数的完全限定名称(你说你只有“foo”,如果函数在命名空间中怎么办?) 这假设您没有模板模板参数或非类型参数.当你拥有它们时会变得更加复杂,因为它可能需要整个表达式树的错位形式.它还假设您没有处理部分或完全显式特化,这更复杂.最后假设您的函数由于编译器特定的扩展(例如32位Windows环境中的__stdcall)而没有任何特殊装饰.哦,一些ABI也可以编码函数的返回类型. 因为根据你的前提,你只有函数名称(不清楚它是否是完全限定的)和模板参数的type_id对象(它可以作为受损类型名称的来源,但不在所有平台上),您没有足够的信息来重新创建受损的名称. 这样就可以选择从二进制文件中获取所有已编译符号的列表(如果可用)并搜索最可能的候选者,这当然容易出错. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |