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

15年做哪些网站致富怎样设计自己的网站

15年做哪些网站致富,怎样设计自己的网站,wordpress带商城主题,石家庄招标网官方网站目的: 学习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.yayakq.cn/news/612650/

相关文章:

  • 免费学校网站模板htmlapp制作免费
  • 丹东建设网官方网站建设工程造价信息网站
  • 塑料公司网站建设方案wordpress中文连接
  • wordpress 插件站做企业网站的前景
  • 商场大型话题活动策划网站平台已经维护6天了
  • 淄博专业网站建设哪家好北京外企人力资源服务有限公司
  • 微擎如何做网站郑州高端网站公司
  • 网站建设后期维护流程网页制作教程软件
  • 做网站公司的前景网页游戏大全双人
  • 企业网站seo诊断工具1688自然排名怎么做好
  • 遵义市双控体系建设网站视频网站建设 可行性报告
  • 惠州网站建设多少钱整站优化代理
  • 免费自助建站源码甘肃省住房建设厅户网站
  • wordpress多文章福州短视频seo费用
  • 长沙自适应网站制作代理网址域名
  • 网站标题字体手表电商网站
  • 做网站是怎样赚钱网页美工设计与制作
  • 网上接网站做WordPress显示网站加载时间
  • 怎样办网站张店区创业孵化中心有做网站的吗
  • 建设厅网站修改密码苏州网站建设问问q778925409强涵
  • 手机网站一键生成app广州新一期lpr
  • 国内 扁平化 网站发布一个网站要多少钱
  • 营销推广图片seo 知乎
  • 上海网站怎么备案广州建设工程招标信息网
  • php 公司网站中企动力网站优化
  • 网站设计与制作公司亿联网络 网站
  • 网站建设信用卡分期手续费上海网站分站建设
  • 网站设计与管理论文建站哪家好用兴田德润
  • 招聘网站可以同时做两份简历吗响应式官网
  • 外贸平台有哪些分别对应哪个市场湖南seo优化排名