首页 文章 精选 留言 我的

精选列表

搜索[c ],共10000篇文章
优秀的个人博客,低调大师

5分钟搞懂C++函数指针与函数类型

函数指针和函数类型 函数指针指向的是函数而非对象。和其他指针类型一样,函数指针指向某种特定类型。 函数类型由它的返回值和参数类型决定,与函数名无关。 bool length_compare(const string &, const string &); 上述函数类型是: bool (const string &, const string &); 上述函数指针pf: bool (*pf)(const string &, const string &); 使用函数指针 当把函数名作为一个值使用时,该函数自动的转换成指针,如: pf = length_compare <=>等价于 pf = &length_compare12 函数指针形参 函数类型不能定义为形参,但是形参可以是指向函数的指针; 函数作为实参使用时,会自动的转换成函数指针; typedef bool Func(const string &, const string &) // Func是函数类型; typedef bool (*FuncP)(const string &, const string &) // FuncP是函数指针类型; typedef decltype(length_compare) Func2 // Func2是函数类型; typedef decltype(length_compare) *Func2P // Func2P是函数指针类型;注意decltype(length_compare)返回的是函数类型,而不是函数指针类型; using FTtype = int(int,int); //函数类型 typedef int (*pf)(int, int); //函数指针 int func(int a, int b){return a+b;} void print(int a, int b, FTtype fn){ // 编译器将其隐式转化成函数指针 cout << fn(a,b) << endl; } int main() { print(1,2,func); cout << typeid(FTtype).name() << endl; cout << typeid(func).name() << endl; cout << typeid(decltype(func)).name() << endl; cout << typeid(pf).name() << endl; return 0; } 下面两个声明语句是同一个函数,因为编译器会自动的将FTtype 转换成函数指针类型。 void print(int a, int b, FTtype fn); void print(int a, int b, pf fn); 返回指向函数的指针 虽然不能返回一个函数,但是能返回执行函数类型的指针。和函数参数不同,编译器不会自动地将函数返回类型当作指针类型处理,必须显示的将返回类型指定为指针。如: using F = int(int*, int); using PF = int(*)(int*,int); F f1(int); //错误: F是函数类型 PF f1(int); //正确: PF是函数指针类型 f1也可以写出下面两种形式: int (*f1(int))(int*, int); auto f1(int)->int(*)(int*, int); 作者:guoxiaojie_415 来源:https://blog.csdn.net/guoxiaojie_415/article/details/79921788 原文发布时间为:2018-09-30 原文作者:良许Linux 本文来自云栖社区合作伙伴“良许Linux”,了解相关信息可以关注“良许Linux”。

优秀的个人博客,低调大师

Skyline桌面二次开发之路径漫游(C#)

所谓路径漫游:即创建一个动态对象和一条由多点组成的线,然后让动态对象沿着线飞行 首先绘制一条线,实际上路径漫游是不需要绘制线的,我这里只是为了确认动态对象是否沿着线路在飞行,代码如下: //绘制路径 double[] cVerticesArray = null; cVerticesArray = new double[] { 116.35, 27.98, 0, 116.45, 28.98, 0, 116.45, 28.11, 0, 116.65, 28.45, 0, }; ILineString pILineString = sgWorld.Creator.GeometryCreator.CreateLineStringGeometry(cVerticesArray); IColor66 color = sgWorld.Creator.CreateColor(255, 0, 0, 125); var polyline = sgWorld.Creator.CreatePolyline(pILineString, color); 接下来创建动态对象,代码如下: var dynamicObject = this.sgWorld.Creator.CreateDynamicObject(0, DynamicMotionStyle.MOTION_GROUND_VEHICLE, DynamicObjectType.DYNAMIC_IMAGE_LABEL, @"F:\项目管理\智慧抚州\使用的Fly\data11\汽车图标\整车.png", 50, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, "", "动态对象"); 参数说明: 第一个参数0:一组IRouteWaypoint66对象,后续向动态对象中添加 第二个参数DynamicMotionStyle:移动方式,是一个枚举类型,具体的效果大家可以去试一下 第三个参数DynamicObjectType:动态对象类型,是一个枚举类型,该参数也决定了你第四个参数的文件类型 第四个参数:由于第三个参数选择的Image_label,这里我选择了一张图片 第五个参数50:文件缩放大小 第六个参数AltitudeTypeCode:高度模式 动态对象创建完成之后就是创建路径的拐点,代码如下: var wayPoint1 = this.sgWorld.Creator.CreateRouteWaypoint(116.35, 27.98, 0, 2000); var wayPoint2 = this.sgWorld.Creator.CreateRouteWaypoint(116.45, 28.98, 0, 2000); var wayPoint3 = this.sgWorld.Creator.CreateRouteWaypoint(116.55, 28.11, 0, 800); var wayPoint4 = this.sgWorld.Creator.CreateRouteWaypoint(116.65, 28.45, 0, 800); 然后将拐点添加到动态对象中: dynamicObject.Waypoints.AddWaypoint(wayPoint1); dynamicObject.Waypoints.AddWaypoint(wayPoint2); dynamicObject.Waypoints.AddWaypoint(wayPoint3); dynamicObject.Waypoints.AddWaypoint(wayPoint4); dynamicObject.CircularRoute = false; dynamicObject.RestartRoute(0); 最后调用飞行到对象,就可以实现路径漫游效果: sgWorld.Navigate.FlyTo(dynamicObject.ID, ActionCode.AC_JUMP);

优秀的个人博客,低调大师

Selenium + C# 实现模拟百度贴吧签到 2

通过上文的例子,我们对Selenium的用法有了一个简单的印象。接下去我们还是基于这个组件进行模拟百度贴吧签到的功能。 逻辑分析 1、登陆 2、得到关注的贴吧 3、签到 登陆首页 首页.png 点击登陆按钮 点击登陆png 输入用户名和密码 输入用户名密码.png 检测异常登录,手机认证 手机验证.png 登陆代码说明 public static void Login(string userName, string pwd) { var driver = new ChromeDriver(); driver.Manage().Window.Maximize();//浏览器最大化 driver.Navigate().GoToUrl("https://www.baidu.com"); oldwin = driver.CurrentWindowHandle;//首页签句柄 driver.FindElement(By.XPath("//*[@id=\"u1\"]/a[7]")).Click();//点击登陆 /*隐式等待设置的内容在driver的整个生命周期都有效,所以实际使用过程当中有弊端。*/ driver.Manage().Timeouts().ImplicitWait = new TimeSpan(0, 0, 0, 5); driver.FindElement(By.Id("TANGRAM__PSP_10__footerULoginBtn")).Click();//点击用户名登陆 driver.FindElement(By.Name("userName")).SendKeys(userName);//用户名 driver.FindElement(By.Name("password")).SendKeys(pwd);//密码 driver.FindElement(By.Id("TANGRAM__PSP_10__submit")).Click(); //点击登陆 Thread.Sleep(1000); try { //判断是否存在手机验证码 driver.FindElement(By.Id("TANGRAM__36__button_send_mobile")).Click();//发送手机验证码 string vcode = Console.ReadLine(); driver.FindElement(By.Id("TANGRAM__36__input_vcode")).SendKeys(vcode);//输入6为数字验证码 driver.FindElement(By.Id("TANGRAM__36__button_submit")).Click();//确认 } catch (Exception e) { } } 贴吧签到 代码说明 传入浏览器Driver,通过xpath得到所有关注的贴吧,循环打开贴吧的页面,模拟点击签到按钮 xpath说明.png 签到.png //贴吧一键签到 public static void OnTimeSign(ChromeDriver driver) { driver.FindElement(By.XPath("//*[@id=\"u_sp\"]/a[5]")).Click(); driver.SwitchTo().Window(driver.WindowHandles[1]);//操作权限为第二个页签 var tiebaList = driver.FindElements(By.XPath("//*[@id=\"likeforumwraper\"]/a")); foreach (var tieba in tiebaList) { tieba.Click(); driver.SwitchTo().Window(driver.WindowHandles[2]);//操作权限为第三个页签 driver.FindElement(By.XPath("//*[@id=\"signstar_wrapper\"]/a")).Click(); driver.Close(); driver.SwitchTo().Window(driver.WindowHandles[1]);//操作权限为第二个页签 } driver.Navigate().Refresh(); driver.Close(); driver.SwitchTo().Window(oldwin); } 就是这么简单。是不是相比原来的方式要简单的多,你是如何浏览器操作的,代码就怎么写。 代码直通车 Github FoxCrawler项目下的SeleniumClawer解决方案

优秀的个人博客,低调大师

C# 如何在PDF中绘制不同风格类型的文本

通过对控件Spire.PDF的测试,我们可以创建PDF文件并向文档中绘制文本、图片、表格、图形等内容,其中,对于绘制文本这一部分,Spire.PDF提供了三种字体类型来绘制文本,即: Standard fonts TrueType fonts Chinese, Japanese and Korean (CJK) fonts 从以上类中我们可以发现,是可以支持中、日、韩、英等字体类的,这为我们在操作PDF文件上提供了更多可能。在这篇文章中,“利用private font改变PDF文件的字体”中讲述了如何应用字体,在接下来的文章中,将介绍如何运用Spire.PDF提供的字体类来绘制不同风格类型的文本。 使用工具:Spire.PDF for .NET 4.0 PS: 安装该类库后,注意在程序中引用Spire.PDF.dll后在进行代码编辑,dll文件可在安装路径下的Bin文件夹中获取。 【示例1】绘制倾斜样式的文本 步骤1:创建实例 PdfDocument doc = new PdfDocument(); PdfPageBase page = doc.Pages.Add(); 步骤2:保存画布状态 PdfGraphicsState state = page.Canvas.Save(); 步骤3:实例化字体,创建格式刷 PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f); PdfSolidBrush brush1 = new PdfSolidBrush(Color.DeepSkyBlue); PdfSolidBrush brush2 = new PdfSolidBrush(Color.CadetBlue); PdfSolidBrush brush3 = new PdfSolidBrush(Color.LightPink); 步骤4:指定文本在画布上的坐标,并指定文本的横向、纵向的拉伸度 page.Canvas.TranslateTransform(10, 100); page.Canvas.ScaleTransform(1f, 0.6f); 步骤5:绘制文本 //绘制倾斜样式的文本 page.Canvas.SkewTransform(-10, 0); page.Canvas.DrawString("THERE IS NO ROYAL ROAD TO LEARNING. ", font, brush1, 0, 0); page.Canvas.SkewTransform(10, 10); page.Canvas.DrawString("Books, like friends, should be few and well chosen. ", font, brush2, 10, 50); //绘制缩放类型的文本 page.Canvas.ScaleTransform(1f, -1f); page.Canvas.DrawString("Books, like friends, should be few and well chosen.", font, brush3, 10, -2 * 50); 步骤6:再次保存画布 page.Canvas.Restore(state); 步骤7:保存文件 doc.SaveToFile("DrawText.pdf"); System.Diagnostics.Process.Start("DrawText.pdf"); 测试效果: 全部代码: using Spire.Pdf; using Spire.Pdf.Graphics; using System.Drawing; namespace DrawTextOfDifferentStyles_PDF { class Program { static void Main(string[] args) { PdfDocument doc = new PdfDocument(); //创建一个PDF文档 PdfPageBase page = doc.Pages.Add(); //添加页 PdfGraphicsState state = page.Canvas.Save(); //实例化字体,创建格式刷 PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f); PdfSolidBrush brush1 = new PdfSolidBrush(Color.DeepSkyBlue); PdfSolidBrush brush2 = new PdfSolidBrush(Color.CadetBlue); PdfSolidBrush brush3 = new PdfSolidBrush(Color.LightPink); page.Canvas.TranslateTransform(10, 100);//指定文本在画布上的坐标位置 page.Canvas.ScaleTransform(1f, 0.6f);//指定文本的横向、纵向的拉伸度 //绘制倾斜样式的文本 page.Canvas.SkewTransform(-10, 0); page.Canvas.DrawString("THERE IS NO ROYAL ROAD TO LEARNING. ", font, brush1, 0, 0); page.Canvas.SkewTransform(10, 10); page.Canvas.DrawString("Books, like friends, should be few and well chosen. ", font, brush2, 10, 50); //绘制缩放类型的文本 page.Canvas.ScaleTransform(1f, -1f); page.Canvas.DrawString("Books, like friends, should be few and well chosen.", font, brush3, 10, -2 * 50); //再次保存画布 page.Canvas.Restore(state); //保存并打开文档 doc.SaveToFile("DrawText.pdf"); System.Diagnostics.Process.Start("DrawText.pdf"); } } } View Code 【示例2】绘制中心旋转图形 步骤1:创建实例 PdfDocument doc = new PdfDocument(); PdfPageBase page = doc.Pages.Add(); 步骤2:保存画布 PdfGraphicsState state = page.Canvas.Save(); 步骤3:实例化字体类,创建格式刷 PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f); PdfSolidBrush brush = new PdfSolidBrush(Color.BlueViolet); 步骤4:设定字符串布局格式,并指定文本在画布中的位置 PdfStringFormat centerAlignment = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); float x = 400; float y = 600;page.Canvas.TranslateTransform(x, y); 步骤5:绘制文本,应用格式 //指定文本绘制数量 for (int i = 0; i < 12; i++) { //设置文本按顺时针方向旋转排列(文本偏移间隔30度) page.Canvas.RotateTransform(30); //绘制文本并应用格式 page.Canvas.DrawString("Every tide has its ebb.", font, brush, 10, 0, centerAlignment); } 步骤6:再次保存画布 page.Canvas.Restore(state); 步骤7:保存文档 doc.SaveToFile("DrawText.pdf"); System.Diagnostics.Process.Start("DrawText.pdf"); 测试结果: (这里做了几个不同样式的demo,可以对比看下效果) 全部代码: using Spire.Pdf; using Spire.Pdf.Graphics; using System.Drawing; namespace _3 { class Program { static void Main(string[] args) { PdfDocument doc = new PdfDocument(); //创建一个PDF文档 PdfPageBase page = doc.Pages.Add(); //添加页 PdfGraphicsState state = page.Canvas.Save(); //实例化字体,创建格式刷 PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f); PdfSolidBrush brush = new PdfSolidBrush(Color.BlueViolet); //设定字符串布局格式,并指定文本在画布中的位置 PdfStringFormat centerAlignment = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); float x = 400; float y = 600; //绘制文本并应用格式 page.Canvas.TranslateTransform(x, y); //指定文本绘制数量 for (int i = 0; i < 12; i++) { //设置文本按顺时针方向旋转排列(文本偏移间隔30度) page.Canvas.RotateTransform(30); //绘制文本并应用格式 page.Canvas.DrawString("Every tide has its ebb.", font, brush, 10, 0, centerAlignment); } //再次保存画布 page.Canvas.Restore(state); //保存并打开文档 doc.SaveToFile("DrawText.pdf"); System.Diagnostics.Process.Start("DrawText.pdf"); } } } View Code 以上是本次关于绘制不同风格类型文本的全部内容,如需转载,请注明出处。 (本文完)

优秀的个人博客,低调大师

C++程序设计基础(1)程序的编译和执行

注:读《程序员面试笔记》笔记总结 1.编译执行过程 1.1预处理: (1)所有以#开头的代码都属于预处理的范畴:#include,#define,#ifdef(#ifndef,#endif),#other(其他宏指令) (2)处理预定义的宏:例如__DATA__,__FILE__(前后都是两个下划线) (3)用一个空格代替连续的注释 (4)处理三元符:例如将??=替换成#(针对很古老的键盘,现在一般较少出现) 1.2编译: 对预处理后的代码进行词法、语法、语义分析,生成汇编代码(.s) 1.3汇编: 将汇编代码生成机器指令,生成目标文件(.o) 1.4链接: 和其他的目标文件以及库文件生成可执行程序 2.面试题 2.1简述#include<>和#include" "的区别 答案:#include直接从编译器指定的路径进行搜索,找不到则报错; #include“ ”则先从程序所做目录进行搜索,然后再到编译器指定路径进行搜索,(自定义的此种方式合适),搜索不到报错。 2.2简述#和##在define中的作用 答案:宏定义中的#运算符将其后面的参数转换成字符串; 宏定义中的##运算符将其前后的参数进行字符串连接。 1 #define PRINTCUBE(x) cout<<"cube("<<#x<<")="<<(x)*(x)*(x)<<endl; 2 3 PRINTCUBE(5); 4 5 //output: 6 //cube(5)=125 7 8 #define LINK3(x,y,z) x##y##z 9 10 LINK3(3,5,0) 11 12 //output: 13 //"350" 2.3简述assert断言的概念 答案:assert用于程序的DEBUG版本中检测条件表达式,如果结果为假,则输出诊断信息并终止程序。 注意点:(1)assert是一个带参数的宏,不是一个函数; (2)在#include语句前加入#define NDEBUG则禁用assert宏(即含有assert的语句都会被忽略); (3)在RELEASE中assert会被忽略(即含有assert的语句都会被忽略); (4)一个assert最好只有一个条件判断语句; 1 //修改前 2 assert(grade>0 && grade<=6); 3 //修改后 4 assert(grade>0); 5 assert(grade<=6); (5)在assert中不要去修改变量的值,否则在RELEASE中被忽略掉,造成结果不同; 1 //修改前 2 assert(success++>60); 3 //修改后 4 assert(success>60); 5 success++; (6)对用户的参数输入判断时,使用if语句来参数合法性检测,不要用assert。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册