C ++:创建启动之间的相关函子列表

时间:2010-03-02 19:06:13

标签: c++ pointers functor

我创建类似函子列表(函数指针)的东西。然后我将它们以二进制形式写入文件中。问题是,functor - 是一个简单的函数指针。 (如果我错了,请纠正我。)但是函数的地址因运行而异。

所以,问题是 - 有没有办法创建一直有效的仿函数列表?

3 个答案:

答案 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)

是的,函数指针只是一个地址。你不能依赖它。相反,您可以创建仿函数数组并将仿函数的索引存储到文件中。或者您可以按名称创建哈希表和引用仿函数。