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