我创建了类似函子列表(函数指针)的东西。然后我将它们以二进制形式写入文件。问题是,仿函数 - 是一个简单的函数指针。(如果我错了,请纠正我。)但是函数的地址从一个运行到另一个不同。
那么,问题是 - 有没有办法创建始终相关的函子列表?
我推荐某种配对的数据结构,一侧是标识符,另一侧是函数指针。如果有足够多的东西,比如地图:
typedef void (*fptr_t)(); // or whatever your function pointer type is
std::map<std::string, fptr_t> fptr_map;
您的应用程序应在第一次需要时构建此地图并缓存结果。然后,当您“写入”指向文件的函数指针时,您应该编写唯一的 std::string 键。当应用程序“读取”函数指针时,它将读取键并将它们映射到函数指针以调用程序。
正如@fbrereto 所提到的,一种可能的解决方案是用一些唯一标识符(整数、字符串、uuid 等)标记不同的函子,这不依赖于每个特定进程中的地址,并将这些密钥存储到文件中。然后,您可以在读取文件时使用工厂设计模式按需实例化函子。
是的,函数指针只是一个地址。你不能依赖它。相反,您可以创建仿函数数组并将仿函数的索引存储到文件中。或者您可以按名称创建哈希表和引用函子。