当前位置: 首页 > news >正文

网站主机多少钱百度区域代理

网站主机多少钱,百度区域代理,昆明平台网站开发,7免费crm目的: 学习C模板的编写,使用模板类包装一个可调用对象 可调用对象包括:普通函数, lambda表达式, 类成员函数 可以参考到QtConcurrent::run的实现,可以看到这个函数有非常多重载,其中可以接受类…
目的:

学习C++模板的编写,使用模板类包装一个可调用对象
可调用对象包括:普通函数, lambda表达式, 类成员函数

可以参考到QtConcurrent::run的实现,可以看到这个函数有非常多重载,其中可以接受类成员函数的重载如下(截图仅能展示部分):
在这里插入图片描述
个人认为,这里的实现不是很好;这里是针对不同参数个数的函数,每一个都做一个重载,如果能实现一种方式,可以适配任意类型和数量的参数就好了

class AsyncTask
{
public:AsyncTask();// 支持可调用对象template <typename Functor, typename ...Args>static QFuture<std::result_of_t<Functor(Args...)>> postTask(Functor&& func, Args&& ...args){return QtConcurrent::run(std::forward<Functor>(func), std::forward<Args>(args)...);}// 支持类成员函数template <typename Class, typename ReturnType, typename... Args>static QFuture<ReturnType> postTask(Class* instance, ReturnType(Class::*memFunc)(Args...), Args&&... args){return QtConcurrent::run(instance, memFunc, std::forward<Args>(args)...);}
};

使用:

class A
{
public:int memFunc(double y, int x){qDebug() << "class member func:" << y << x << QThread::currentThreadId();return x;}
};int normalFunc(int x)
{qDebug() << "normal function:" << x << QThread::currentThreadId();return x;
}int main(int argc, char *argv[])
{QFuture<bool> future = AsyncTask::postTask([](int x, int y){qDebug() << "lambda:" << x << y << QThread::currentThreadId();return  x < y;}, 3, 2);       //绑定lambda表达式QFuture<int> future2 = AsyncTask::postTask(normalFunc, 5);      //绑定普通函数A x;QFuture<int> future3 = AsyncTask::postTask(&x, &A::memFunc, 2.5, 3);        //绑定类成员函数}

使用模板类包装类成员函数

// 模板类,用于包装类成员函数指针
template <typename Class, typename RetType, typename ...Args>
class MemberFunctionPointer
{
public:using MemFuncPtr = RetType(Class::*)(Args...);		//类成员函数指针MemberFunctionPointer(MemFuncPtr ptr, Class* obj): m_ptr(ptr), object(obj){}RetType invoke(Args&&... args){return (object->*m_ptr)(std:: forward<Args>(args)...);}
private:MemFuncPtr m_ptr;Class* object;
};// 辅助函数,用于模板参数推导
// C++17之前, 模板类的模板参数不能自动推导,必须显示指出, 例如std::vector<int>; std::list<int>; 而模板函数的模板参数可以自动推导, 所以标准库才提供 std::make_pair的函数,减轻模板类的编码负担
template <typename Class, typename RetType, typename... Args>
MemberFunctionPointer<Class, RetType, Args...> make_wrapper(RetType (Class::*fn)(Args...), Class* object)
{return MemberFunctionPointer<Class, RetType, Args...>(fn, object);
}

使用:

    auto wrapper = make_wrapper(&A::memFunc, &x);wrapper.invoke(3.2, 8);

在这里插入图片描述


在这里插入图片描述

参考

http://www.tj-hxxt.cn/news/62387.html

相关文章:

  • 周口市做网站北京营销公司排行榜
  • 江西省建设职业培训学校网站查网站域名
  • 动态网站开发技术有哪些产品市场营销策划书
  • 用哪个语言做网站比较好今日头条国际新闻
  • 梧州做网站黑马培训
  • 深圳网站制作哪家专业营销技巧和营销方法
  • 祁连县公司网站建设重庆百度seo排名优化软件
  • a站和b站哪个更好视频企业策划方案怎么做
  • 南通高端网站建设公司英文外链代发
  • 厦门微信网站建设关键词挖掘爱站网
  • 高明区住房和城乡建设局网站网络营销策略研究论文
  • web技术有哪些网站优化系统
  • 门户网站模版建设网站的网络公司
  • 如果做网站运营域名备案官网
  • 网站建设负责那内容上传吗报个计算机培训班多少钱
  • 局域网动态网站建设河南网站建设报价
  • wordpress 非插件七牛cdn全站加速找客户资源的软件
  • flash网站的制作推广平台哪个效果最好
  • 如何做淘宝cms导购网站网络营销的招聘信息
  • 织梦做的网站怎么上传视频株洲今日头条新闻
  • 那里可以做网站沈阳百度推广优化
  • asp网站怎么安装可以直接打开网站的网页
  • 黑客怎么入侵网站韶山百度seo
  • 南阳网站建设新闻企业宣传推广怎么做
  • 做网站优化的公司的宣传海报百度竞价推广代理商
  • 布吉做棋牌网站建设哪家便宜湖北网站设计
  • 六安木兰巷上海比较大的优化公司
  • 虚拟主机如何做网站苏州百度推广开户
  • 遵义网站建设中心seo网站推广助理招聘
  • 深圳外贸网站建设公司企业网站优化