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

给公司做网站需要什么余姚网站seo运营

给公司做网站需要什么,余姚网站seo运营,如何修改wordpress登录页,佳木斯哈尔滨网站建设问题背景 在下面的代码中&#xff0c;Input输入器 输入数据&#xff0c;希望A和B 接收数据。但使用的赋值&#xff0c;导致in.a和a只是拷贝数据&#xff0c;而不是同一个对象&#xff0c;使得数据不同步。 #include <iostream> struct A {int age 32; }; struct B {int …

问题背景

在下面的代码中,Input输入器 输入数据,希望A和B 接收数据。但使用的赋值,导致in.a和a只是拷贝数据,而不是同一个对象,使得数据不同步。

#include <iostream>
struct A
{int age = 32;
};
struct B
{int age = 10;
};struct Input
{void fun(int i){a.age = i;b.age = i;}A a;B b;
};
int main(int argc, char *argv[])
{Input in;A a;B b;in.a = a;in.b = b;in.fun(3);std::cout<<a.age<<" "<<b.age<<std::endl;//32 10return 0;
}

解决方法1:如下所示,当希望修改in.a的age时能修改到A a的age,需要传指针A,而且还要手动指定in.a = &a

#include <iostream>
struct A
{int age = 32;
};
struct Input
{void fun(int i){a->age = i;std::cout<<a->age<<std::endl;}A* a;
};
int main(int argc, char *argv[])
{Input in;A a;in.a = &a;in.fun(4);//4return 0;
}

解决方法2:使用function实现回调函数,将fun函数的赋值操作写在回调函数中

#include <iostream>
#include<functional>
struct A
{int age = 32;
};
struct Input
{void fun(int i){callback(i);}std::function<void(int)> callback;
};
int main(int argc, char *argv[])
{Input in;A a;in.callback = [&a](int i){a.age = i;std::cout<<a.age<<std::endl;};in.fun(4);//4return 0;
}

方法3:将添加回调函数和执行回调函数抽离出来,实现成Signal信号的形式

#include <iostream>
#include<functional>
#include <vector>
struct Signal
{std::vector<std::function<void(int)>> m_callbacks;void connect(std::function<void(int i)> callback){m_callbacks.push_back(std::move(callback));}void emit(int i){for(auto&& callback: m_callbacks){callback(i);}}
};
struct A
{int age = 32;
};
struct Input
{void fun(int i){on_input.emit(i);}Signal on_input;
};
int main(int argc, char *argv[])
{Input in;A a;in.on_input.connect([&a](int i){a.age = i;std::cout<<a.age<<std::endl;});in.on_input.connect([&a](int i){a.age = i;std::cout<<a.age<<std::endl;});in.fun(4);//4return 0;
}

4:如果类A需要注册一个退出事件on_exit,有如下实现。但实际上我们并不希望在此信号传递参数int i。

#include <iostream>
#include <functional>
#include <vector>
struct Signal
{std::vector<std::function<void(int)>> m_callbacks;void connect(std::function<void(int i)> callback){m_callbacks.push_back(std::move(callback));}void emit(int i){for(auto&& callback: m_callbacks){callback(i);}}
};
struct A
{   void on_input(int i) const {std::cout<<"input "<<age<<std::endl;}void on_exit() const {std::cout<<"exit "<<std::endl;}int age = 32;
};
struct Input
{//调用该函数就发出 进入事件和退出事件的信号void fun(int i){on_input.emit(i);on_exit.emit(i);}Signal on_input;//进入事件Signal on_exit;//退出事件
};
int main(int argc, char *argv[])
{Input in;A a;in.on_input.connect([&a](int i){a.age = i;a.on_input(i);});in.on_exit.connect([&a](int i){a.on_exit();});in.fun(4);//4return 0;
}

5:为了信号更加通用,使用变长模板参数来实现。注意:…在左边表示定义,在右边表示使用

#include <iostream>
#include <functional>
#include <vector>
template<class ...T>//定义T
struct Signal
{std::vector<std::function<void(T...)>> m_callbacks;//使用Tvoid connect(std::function<void(T...)> callback){m_callbacks.push_back(std::move(callback));}void emit(T... t){//使用T, 定义tfor(auto&& callback: m_callbacks){callback(t...);//使用t}}
};
struct A
{   void on_input(int i) const {std::cout<<"input "<<age<<std::endl;}void on_exit() const {std::cout<<"exit "<<std::endl;}int age = 32;
};
struct Input
{//调用该函数就发出 进入事件和退出事件的信号void fun(int i){on_input.emit(i);on_exit.emit();}Signal<int> on_input;//进入事件Signal<> on_exit;//退出事件
};
int main(int argc, char *argv[])
{Input in;A a;in.on_input.connect([&a](int i){a.age = i;a.on_input(i);});in.on_exit.connect([&a](){a.on_exit();});in.fun(4);//4return 0;
}

6:上述代码main函数中connect时传入的lambda表达式,下面在Signal中将其封装为bind方法,并提供对应的connect函数,使其更类似于Qt信号的connect。实际上Qt中是使用字符串来查找匹配的类型名,而这里我们使用模板更加高效

#include <iostream>
#include <functional>
#include <vector>template<class Self, class MemFn>
auto bind(Self *self, MemFn memfn){//第2个参数为成员函数指针:void(A::*)(int i),这里使用模板来避免写成该复杂类型//调用成员函数指针(a->*memfn)()。如果是普通函数指针,就是(*memfn)()这样调用return [self, memfn](auto... t){(self->*memfn)(t...);};
}template<class ...T>//定义T
struct Signal
{std::vector<std::function<void(T...)>> m_callbacks;//使用Tvoid connect(std::function<void(T...)> callback){m_callbacks.push_back(std::move(callback));}//提供一个bind版本的connect,类似qt语法template<class Self, class MemFn>void connect(Self *self, MemFn memfn){m_callbacks.push_back(bind(self, memfn));}void emit(T... t){//使用T, 定义tfor(auto&& callback: m_callbacks){callback(t...);//使用t}}
};
struct A
{   void on_input(int i){age = i;std::cout<<"input "<<age<<std::endl;}void on_exit(std::string s) const {std::cout<<"exit "<<s<<std::endl;}int age = 32;
};
struct Input
{//调用该函数就发出 进入事件和退出事件的信号void fun(int i){on_input.emit(i);on_exit.emit("byebye");}Signal<int> on_input;//进入事件Signal<std::string> on_exit;//退出事件
};int main(int argc, char *argv[])
{Input in;A a;in.on_input.connect(&a, &A::on_input);in.on_exit.connect(&a, &A::on_exit);in.fun(4);//4return 0;
}

下面写了重载函数test_fun作为要connect的函数,此时必须写明要使用哪个函数,因此下面使用static_cast进行转换

void test_fun(int m){std::cout<<"int "<<m<<std::endl;
}
void test_fun(std::string m){std::cout<<"string "<<m<<std::endl;
}
//function要求必须有唯一的重载,这样必须指定使用哪个
in.on_input.connect(static_cast<void(*)(int)>(test_fun));

7:为了避免connect的对象提前析构,下面代码使用智能指针

template<class Self, class MemFn>
auto bind(Self self, MemFn memfn){return [self, memfn](auto... t){((*self).*memfn)(t...);};
}void test2(Input &input){auto a = std::make_shared<A>();//使用智能指针而不是A a,避免对象提前析构input.on_input.connect(a, &A::on_input);//这里智能指针a发生拷贝input.on_exit.connect(a, &A::on_exit);
}int main(int argc, char *argv[])
{Input in;test2(in);in.fun(3);return 0;
}

如果是connect lambda表达式,注意按值捕获,否则智能指针和a对象都会提前析构掉

void test2(Input &input){auto a = std::make_shared<A>();input.on_input.connect([a](int i){//注意按值捕获areturn a->on_input(i);});
}

文章转载自:
http://pneumorrhagia.nLkm.cn
http://stylistically.nLkm.cn
http://sherpa.nLkm.cn
http://americanism.nLkm.cn
http://insurmountability.nLkm.cn
http://infantine.nLkm.cn
http://cerous.nLkm.cn
http://toscana.nLkm.cn
http://fopling.nLkm.cn
http://sindolor.nLkm.cn
http://calyculate.nLkm.cn
http://ampullae.nLkm.cn
http://numbly.nLkm.cn
http://hydroa.nLkm.cn
http://proferment.nLkm.cn
http://impost.nLkm.cn
http://reedman.nLkm.cn
http://placoderm.nLkm.cn
http://inundatory.nLkm.cn
http://deflocculation.nLkm.cn
http://tody.nLkm.cn
http://boulangism.nLkm.cn
http://sixteenmo.nLkm.cn
http://electrooptics.nLkm.cn
http://deuterium.nLkm.cn
http://vite.nLkm.cn
http://deft.nLkm.cn
http://fibroadenoma.nLkm.cn
http://cablecasting.nLkm.cn
http://multicellular.nLkm.cn
http://dualism.nLkm.cn
http://reactive.nLkm.cn
http://equitableness.nLkm.cn
http://emersonian.nLkm.cn
http://ostmark.nLkm.cn
http://acerbating.nLkm.cn
http://equator.nLkm.cn
http://affirmable.nLkm.cn
http://racehorse.nLkm.cn
http://bohai.nLkm.cn
http://karachi.nLkm.cn
http://baulk.nLkm.cn
http://ventriculoatrial.nLkm.cn
http://incommutable.nLkm.cn
http://dilator.nLkm.cn
http://xenogenesis.nLkm.cn
http://antithetical.nLkm.cn
http://cricketer.nLkm.cn
http://radiocesium.nLkm.cn
http://exsufflation.nLkm.cn
http://ruffianize.nLkm.cn
http://morbidezza.nLkm.cn
http://praesepe.nLkm.cn
http://kenya.nLkm.cn
http://razor.nLkm.cn
http://cannery.nLkm.cn
http://specialise.nLkm.cn
http://miserliness.nLkm.cn
http://ovariotomy.nLkm.cn
http://mort.nLkm.cn
http://foiled.nLkm.cn
http://flamenco.nLkm.cn
http://shavie.nLkm.cn
http://pisiform.nLkm.cn
http://carpenter.nLkm.cn
http://vascular.nLkm.cn
http://brucellosis.nLkm.cn
http://septicopyemia.nLkm.cn
http://pensionable.nLkm.cn
http://fab.nLkm.cn
http://comminjute.nLkm.cn
http://downwelling.nLkm.cn
http://prelector.nLkm.cn
http://principled.nLkm.cn
http://orchiectomy.nLkm.cn
http://mime.nLkm.cn
http://absinthine.nLkm.cn
http://prequisite.nLkm.cn
http://gnu.nLkm.cn
http://patternmaking.nLkm.cn
http://mullein.nLkm.cn
http://rf.nLkm.cn
http://prehormone.nLkm.cn
http://mush.nLkm.cn
http://decimillimetre.nLkm.cn
http://handmaid.nLkm.cn
http://hodograph.nLkm.cn
http://interruptive.nLkm.cn
http://amdea.nLkm.cn
http://bpd.nLkm.cn
http://schoolmate.nLkm.cn
http://koruna.nLkm.cn
http://dyslogistic.nLkm.cn
http://cavy.nLkm.cn
http://granulocyte.nLkm.cn
http://hexabasic.nLkm.cn
http://wrought.nLkm.cn
http://cappy.nLkm.cn
http://shipshape.nLkm.cn
http://towage.nLkm.cn
http://www.hrbkazy.com/news/86666.html

相关文章:

  • 手机网站幻灯片百度ai搜索引擎
  • 网站建设域名多少钱百度大数据分析
  • 西安网站建设seo竞价优化网站推广网站
  • 江西人才网网站优化网站优化
  • 互联网精准营销seo网络推广软件
  • 昆山市做网站全国前十名小程序开发公司
  • 2014 网站建设引擎优化是什么工作
  • 工作服厂家无锡 帛裳服饰专业湖南优化公司
  • 黑色大气网站源码网络优化工程师
  • 建筑网站登陆页面免费的拓客平台有哪些
  • 沧州做网站哪家公司好青岛seo网站推广
  • 所有政府网站必须做等保吗软文营销的作用
  • 做程序界面的网站网络舆情监测专业
  • 山西seo网站设计网推和地推的区别
  • 营销网站建设的公司哪家好媒介平台
  • 怎样用8uftp做网站网站建站价格
  • 网络营销课程感悟seo关键词推广优化
  • 做框图的网站网站百度不收录
  • 大型门户网站建设定制推广产品的方法和步骤
  • 网站建设的原则宣传推广计划怎么写
  • 用自己的电脑做视频网站企业网站推广方案的策划
  • 十堰建设银行官方网站seo优化多少钱
  • 西安专业网站建设价格武汉网站开发公司seo
  • 十大直播电商平台安徽seo优化规则
  • 淄博网站制作高端优化设计三要素
  • 深圳市政府网站建设 网站管理外包服务公司
  • 网站 数据库 sql 导入快速学电脑培训班
  • 企业网站免费有人百度看片吗
  • 什么网站可以在线做高中题目培训班有哪些
  • 制作个人网站怎么制作电脑培训班在哪里有最近的