跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问 C++中对函数指针的序列化存储有没有好的建议?
未分類
21 10 月 2020

请问 C++中对函数指针的序列化存储有没有好的建议?

请问 C++中对函数指针的序列化存储有没有好的建议?

資深大佬 : 1YsX1 6

目前有这样的一个需求,处理起来小有迷茫,希望有大佬能够进行指点。

我用工厂模式构造了一个通过字符串来返回具体子类的基类函数,字符串与子类的 Create 方法使用 std::map 进行存储,这样在程序运行时是可以通过字符串来动态的获取到不同的子类实体的。

但是我现在希望将这些动态关系进行序列保存,直接使用 boost 的序列化库的话是会有如下报错的

cannot convert ‘t’ (type ‘parser::parser* (*)()’) to type ‘const void*’ 

看起来 boost 库的序列化是不支持函数指针的序列化的,同时我也在考虑每次重新运行或者换了机器运行时函数指针是不是也会发生变化。所以感觉这个方案不太靠谱。目前从网上进行了搜索,也没有找到合适的方案,希望能有前辈指点一下方向,谢谢!

大佬有話說 (9)

  • 資深大佬 : feelapi

    为什么要保存函数指针?函数名不好么?动态加载不就可以了。

  • 資深大佬 : tairan2006

    啥玩意,你要序列化函数指针干啥?反射听过没

  • 資深大佬 : tairan2006

    当然 C++不支持反射,但是思想类似

  • 資深大佬 : hitmanx

    dlsym

  • 主 資深大佬 : 1YsX1

    @feelapi
    @tairan2006
    @hitmanx
    谢谢几位大佬指路!

  • 資深大佬 : xuanbg

    想不通序列化指针有啥用?

  • 資深大佬 : msg7086

    指针当然会变啊。

  • 資深大佬 : hacher

    函数指针本质是内存地址, 不知道你运行环境是什么, 在 windows 下函数地址和程序基址的偏移是固定的: diff = &function – GetModuleHandle(nullptr)
    你保存 diff, 下次运行时加上程序基址就是函数地址了: function = diff + GetModuleHandle(nullptr)
    要注意的是这个偏移每次编译后都会变化的~

  • 資深大佬 : togou

    函数指针算数据么? 一般来说就数据或者数据结构需要序列化

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具