ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JFrame(用C++11特性重构系列——DllParser的实现)

2022-05-15 10:03:11  阅读:120  来源: 互联网

标签:11 std JFrame 函数 map DllParser Args funcName function


 1     template <typename T>
 2     std::function<T> GetFunction(const string& funcName)
 3     {
 4         auto it = m_map.find(funcName);
 5         if (it == m_map.end())
 6         {
 7             auto addr = GetProcAddress(m_hMod, funcName.c_str());
 8             if (!addr)
 9                 return nullptr;
10             m_map.insert(std::make_pair(funcName, addr));
11             it = m_map.find(funcName);
12         }
13         
14         return std::function<T>((T*) (it->second));
15     }

上面的函数通过函数名从 dll 中获取函数地址,然后转换为std::function<T>类型的对象,其中 T 为函数签名,例如std::function<int(int, string)>!

 1     template <typename T, typename... Args>
 2     typename std::result_of<std::function<T>(Args...)>::type ExcecuteFunc(const string& funcName, Args&&... args)
 3     {
 4         auto f = GetFunction<T>(funcName);
 5         if (f == nullptr)
 6         {
 7             string s = "can not find this function " + funcName;
 8             throw std::exception(s.c_str());
 9         }            
10 
11         return f(std::forward<Args>(args)...);
12     }

上面的函数先通过 GetFunction 获取 std::function<T> 类型的函数对象,然后再用这个函数对象带着 Args 执行,返回结果是使用 std::result_of<std::function<T>(Args...)>::type 推导的!

标签:11,std,JFrame,函数,map,DllParser,Args,funcName,function
来源: https://www.cnblogs.com/JackZheng/p/16272415.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有