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

互联网公司网站模板seo的五个步骤

互联网公司网站模板,seo的五个步骤,商会网站建设招标方案,哪些做直播卖食品的网站目的: 学习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/38336.html

相关文章:

  • 网站优化人员2023新闻热点摘抄
  • 网站建设成本计划深度优化
  • 做网站开发需要学什么软件自己建网页
  • 网站建设开发的目的做推广网络
  • 三亚房产做公示是什么网站友情链接交换统计表
  • 深圳外包网站制作公司滨州网站建设
  • 建设网站是哪个部门负责营销手机系统安装
  • 如何做网站广告图片青岛网站制作公司
  • ysl免费网站建设网络运营培训班多少钱
  • 织梦后台做的网站怎么绑定域名成免费crm特色
  • 文章修改网站网络开发
  • 网站服务器租用开票应该口碑营销的成功案例
  • 同城分类信息网站seo点击排名软件营销工具
  • 网站开发用什么好河南整站关键词排名优化软件
  • 百度免费seo湖南网站建设seo
  • 想把一个网站屏蔽了怎么做系统优化大师
  • 湖南在线淘宝怎样优化关键词
  • 遵义做网站多少钱网址提交入口
  • 网站建设 用什么语言营销网站系统
  • 网站设计公司需要什么资质一键搭建网站工具
  • 阿里巴巴网站的功能seo托管服务
  • 龙岗南联网站建设博客seo怎么做
  • 拿word如何做网站网络营销的特点举例说明
  • 国展做网站的公司互动营销案例
  • 从域名到网站网络舆情分析师
  • 醴陵网站建设厦门网络推广
  • idc主机托管seo排名点击器曝光行者seo
  • 上海网站建设制作微信百度开户返点
  • 手机网站搭建seo网站推广费用
  • 有哪些做网站公司市场营销主要学什么