gpt4 book ai didi

c++ - 如何将元数据附加到函数?

转载 作者:太空宇宙 更新时间:2023-11-04 14:31:45 25 4
gpt4 key购买 nike

程序中是否有任何基于索引的表来存储可执行文件中每个函数的元数据?我需要将指针附加到给定的每个函数指针;例如:

if (!HasMetadata(functionPointer)) //Something of the form ...(*)(...)
SetMetadata(new FunctionMetadata()); //Pointer of object of some structure of data
((FunctionMetadata*)GetMetadata(functionPointer))->Counter++;

注意:我考虑过使用键/值类型的对象;我不能,因为我有 3000 多个函数,可能所有函数都需要在表中。如果我没有 3000 多个函数,那么我会手动考虑为每个函数添加静态值。

最佳答案

C++ 没有附加到函数、类或实例的内在元数据。然而,有几个可用的库,通过一些规则,允许您将元数据添加到各种事物中。参见 this stackoverflow 问题,等等。

为了您的目的,在函数指针和它们的元数据之间有一种全局映射可能就足够了。例如,

// we'll use a generic function pointer as the key type for functions.  Note that things will 
// be somewhat trickier should you want to work with virtual functions or instance
//members.

typedef void(*)() FunctionPtr;

static std::map<FunctionPtr, Metadata *> gFunctionMetadata;

Metadata *GetMetadata(FunctionPtr functionPtr){
return gFunctionMetadata[functionPtr];
}

一个更漂亮的解决方案当然是拥有一个包含 map 并提供访问元数据的方法的单例类(MetadataManager 或类似的类)。

关于c++ - 如何将元数据附加到函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com