![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
zeqi1991
这个作者很懒,什么都没留下…
展开
-
RegionProp
【代码】RegionProp。原创 2023-05-29 15:05:47 · 131 阅读 · 0 评论 -
swscanf反向格式化字符串为相应的数据
字符串拆解原创 2023-01-11 18:28:24 · 159 阅读 · 0 评论 -
基类、派生类绑定智能指针后的转换
【代码】基类、派生类绑定智能指针后的转换。原创 2022-11-24 19:46:49 · 302 阅读 · 0 评论 -
CString输出文本对齐处理
int HasChineseChar(const CString& str){ CString content; int count = 0; for (int i = 0; i < str.GetLength(); i++) { if (str.GetAt(i) > 255) { content += str.GetAt(i); count++; }原创 2022-05-15 14:41:18 · 433 阅读 · 0 评论 -
arx绘制临时图像
有时候需要绘制临时图像,这些图像不能被选中等属性static AcArray<AcDbEntity*> _markers;static AcArray<int> viewportNumbers;static void ClearTransientGraphics(){ AcGiTransientManager* pTransientManager = acgiGetTransientManager(); int numOfMarkers = _marker原创 2022-04-21 09:10:57 · 986 阅读 · 0 评论 -
MFC程序调用时,获取命令行参数的几个方法
方法一CString commandLine = GetCommandLine();这里获取到 "C:\test\app.exe -1 -2"方法二AfxGetApp()->m_lpCmdLine这里获取到 "-1 -2"原创 2021-12-11 10:44:43 · 807 阅读 · 0 评论 -
ARX清理layout
void ClearLayout(){ CString msLayoutName; CStringArray layoutNames; AcDbObjectId msID = acdbSymUtil()->blockModelSpaceId(m_pDatabase); AcDbObjectId dictId = m_pDatabase->layoutDictionaryId(); AcDbDictionary* pDict = NULL; if原创 2021-09-08 21:48:32 · 319 阅读 · 0 评论 -
virtual constructs
假定一个新闻由文字和图片组成//抽象基类class NLComponent{}class TextBlock : public NLComponent{}class Graphic : public NLComponent{}//新闻管理器class NewsLetter{public:private: std::vector<NLComponent*> components;}问题 : NewsLetter要有拷贝构造函数时应该怎么处理?原创 2021-07-03 17:14:15 · 85 阅读 · 0 评论 -
Windows系统下获取本机IP
#pragma comment(lib, "ws2_32.lib") WSADATA wsd; WSAStartup(MAKEWORD(2, 2), &wsd); DWORD size = MAX_PATH; char computerName[MAX_PATH] = { 0 }; GetComputerNameA(computerName, &size); CString str; struct hostent* pHost = nu原创 2021-06-30 14:42:11 · 258 阅读 · 0 评论 -
获取当前视图范围内的所有实体,用于局部选择时提前筛选
void PluginCommand::Test(){ struct resbuf sysVar; acedGetVar(_T("SCREENSIZE"), &sysVar); int nScreenX = (short)sysVar.resval.rpoint[0]; int nScreenY = (short)sysVar.resval.rpoint[1]; acedGetVar(_T("VIEWSIZE"), &sysVar); dou原创 2021-04-02 15:16:38 · 541 阅读 · 0 评论 -
explicit
explicitexplicit用于构造函数的隐式转换class MyCa{public: MyCa(int a) : m_a(a){}private: int m_a;};void TestMyCa(MyCa a){ //TODO:}char ch = 'a';TestMyCa(ch);//将ch用作参数转换成一个MyCa避免这种情况就应该使用explicit关键字 : explicit MyCa(int a);explicit用于转换运算符cl原创 2021-01-22 10:05:21 · 123 阅读 · 0 评论 -
Effective C++ 条款33 :避免遮掩继承而来的名称
Effective C++ 条款33 :避免遮掩继承而来的名称class Base{public: virtual void mf1() = 0; virtual void mf2(); void mf3();private: int x;};class Derived : public Base{public: virtual void mf1(); void mf4();};void Derived::mf4(){ //.原创 2020-12-11 10:05:18 · 112 阅读 · 0 评论 -
vsvim的设置
vsvim退出编辑模式的方法使用ESC,但是esc按键太远,不太适合使用vsvimrc文件,用 jj这个快捷键代替使用hotkey,交换esc和caps lock使用vsvim自带的ctrl+[介绍一些怎么处理vsvim自带的 ctrl + [, 首先,ctrl+[会被vs自动处理为一个组合键,所以按下这两个键时,vsvim不会立刻响应并执行下一步的操作。原来我是连续按两次ctlr + [,解决办法是:在选项-vsvim-keyboard中调整ctrl+[为vsvim,然后在选项-环境-键盘原创 2020-12-07 09:23:31 · 641 阅读 · 0 评论 -
常用文件读写(1)
文件操作的几种方式使用CRT函数文件操作可以使用C语言运行时库来完成,CRT提供的fxxx()函数如下表所示函数含义fopen打开指定文件名的文件fclose关闭文件fwrite向文件写入指定的数据fread从文件中读取指定长度的数据fgetc从文本文件中读取一个字符fgets从文件文件中读取一串字符fputc向文本文件写入一个字符fputs向文本文件中写入一个字符串feof判断文件是否到达文件结尾ftel原创 2020-11-20 19:01:09 · 509 阅读 · 0 评论 -
bitset
bitsetstd::bitset这个集合描述的是数值的每一个位,它的值为0或者1要使用位集合,需要添加头文件#include <bitset>bitse是一个模板类,原型如下template <size_t N> //N对应待处理的位数class bitset{...}std::bitset<32> i;std::bitset<sizeof(int)> i;严格来说,bitset并不属于stl容器的范畴,它也不支持指示器的操作。bi原创 2020-11-20 09:57:35 · 931 阅读 · 0 评论 -
使用sqlite库
下载sqlite官方网页上下载即可编译下载内容分别是源码,32和64位的dll,和shell工具。解压后将源码的头文件放到inc文件夹,32位的dll和def,和64位的dll,def分别放到各自的文件夹。现在生成lib文件用Visual Studio的“开发人员命令提示”进入sqlite-x86目录执行lib /def:sqlite3.def /machine:x86 命令生成 lib 文件执行lib /def:sqlite3.def /machine:x64编译x64的lib头原创 2020-08-31 19:14:24 · 148 阅读 · 0 评论 -
extern C
extern “C”extern "C"的作用被extern “C“修饰的代码会按照C语言的方式去编译。声明需要使用extern C,实现不需要。如果extern C加在实现上,会出现链接方式的冲突问题。extern "C"{void dosomething();int getIndex();const char* getName();}void dosomething(){ }int getIndex(){ }const char* getName()原创 2020-05-24 10:52:17 · 792 阅读 · 0 评论 -
const实现的机制
const的实现机制const究竟是如何实现的呢?对于声明为const的内置类型,例如int,short,long等等,编译器会如何实现const的本意?那么对于非内置类型是否也是与内置数据类型一样处理呢,例如对于结构体类型则会怎样处理呢?下面通过几个小例子来说明这些问题:C语言const示例:const int i=10;int *p=(int *)(&i);*p转载 2017-08-26 16:36:25 · 222 阅读 · 0 评论 -
关于stl容器的遍历删除
//对于vector的遍历删除std::vector<int> v(8);for (auto x = v.begin(); x != v.end(); ){ if (*x % 2) x = x.erase(x); else ++x;}//对于map的遍历删除std::map<int, int> m;for (auto x = m.begin()...原创 2019-06-29 11:30:28 · 632 阅读 · 0 评论 -
函数对象
函数对象传递给算法的函数型参数并不一定是函数,也可能是类似函数的对象。这种对象称为函数对象,或者称为仿函数。定义一个函数对象任何东西,只要其行为像函数,那么它就是一个函数。因此你定义了一个对象,行为像函数,它就可以被当作函数使用。也就说它具备着函数行为。什么叫函数行为:使用小括号传递参数,借以调用某个东西。function(arg1, arg2);如果希望一个对象也能这样使用,那么就必...原创 2019-07-05 16:41:08 · 184 阅读 · 0 评论 -
resize和reserve
先看看《C++ Primer》中对resize()函数两种用法的介绍:1、resize(n)调整容器的长度大小,使其能容纳n个元素。如果n小于容器的当前的size,则删除多出来的元素。否则,添加采用值初始化的元素。2、 resize(n,t)多一个参数t,将所有新添加的元素初始化为t。而reserver()的用法只有一种reserve(n)预分配n个元素的存储空间。了解这两个函...原创 2019-08-28 10:47:39 · 893 阅读 · 1 评论 -
单例模式
关于单例模式有些场景下,我们需要保证某一个类只允许有一个实例。这意味着不能通过构造函数,拷贝构造函数来创建更多的对象。也意味着,在多线程的环境下,也只允许有一个实例。保证唯一性保证多线程下的安全性考虑在单线程下的单例模式:class Singleton{ private: static Singleton *local_instance; Singleton()...原创 2019-08-31 14:05:29 · 151 阅读 · 0 评论 -
ARX中非模态对话框
ARX中非模态对话框的用法//类似一个全局变量CNoModalDlg* pDlg = nullptr;//资源切换CAcModuleResourceOverride myResource;CMDIFrameWnd* pCadWnd = acedGetAcadFrame();pDlg = new CNoModalDlg;pDlg->Create(IDD_DIALOG_TEST...原创 2019-07-04 10:21:18 · 988 阅读 · 0 评论 -
pre_declaration
前置声明 头文件A包含另一个头文件B,是为了引入在头文件A中使用到的类,函数,结构体,枚举或者其他实体声明。在面向对象程序中,最常见的情况是头文件A想要引入头文件B中的一个或者多个类的声明。不过,很多情况下头文件A实际上不必包含头文件B,只需要提供前置声明即可。前置声明可以在下列几种情况下使用:不需要知道类的大小,如果包含的类作为成员变量,或者打算派生当前包含类,那么就需要知道类大...原创 2019-07-03 09:34:50 · 200 阅读 · 0 评论 -
写一个简单的链式栈
list_stack.h#ifndef _INCLUDE_LIST_STACK_H__#define _INCLUDE_LIST_STACK_H__#include <cassert>#ifdef _DEBUG#include <iostream>#endiftemplate <typename T>class Stack{publ...原创 2018-08-26 20:03:04 · 229 阅读 · 0 评论 -
一个简单的链式队列
list_queue.h//写一个基于链式的队列#ifndef _INCLUDE_LIST_QUEUE_H__#define _INCLUDE_LIST_QUEUE_H__#include <cassert>#ifdef _DEBUG#include <iostream>#endiftemplate <typename T>class ...原创 2018-08-26 19:42:41 · 176 阅读 · 0 评论 -
关于shared_ptr的几点
//测试shared_ptr的初始化{ shared_ptr&lt;int&gt; p1(new int(3)); shared_ptr&lt;int&gt; p2 = make_shared&lt;int&gt;(3);//优先使用 if (*p1 == *p2) cout &lt;&lt; "equal&quo原创 2018-08-09 21:51:27 · 418 阅读 · 0 评论 -
VC下文件的使用
在VC下文件的使用的案例文件常用的有新建,读,写文件,删除文件,读取文件的路径,创建文件夹(目录),文件的复制,移动,重命名,读取文件的大小,查找文件,遍历目录下的文件和子目录,递归遍历目录下的所有文件和子目录比较少用到的的功能设置文件的属性,使用内存映射文件等下面是几个关于文件使用几个函数 : #include <Windows.h>#include <stdio.h>...原创 2018-04-15 20:46:42 · 3245 阅读 · 0 评论 -
std::bind
先来看看std::bind1st和std::bind2ndbind是这样一种机制,它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调 用实体,这种机制在回调函数的使用过程中也颇为有用。C++98中,有两个函数bind1st和bind2nd,它们分别可以用来绑定functor的第 一个和第二个参数,它们都是只可以绑定一个参数。各种限制,使得bind1st和bind2nd的转载 2017-06-25 19:44:44 · 257 阅读 · 0 评论 -
std::function的用法
类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。std::function对象是对C++中现有的可调用实体的一种类型安全的包裹(我们知道像函数指针这类可调用实体,是类型不安全的)。通常std::function是一个转载 2017-06-25 19:31:54 · 11765 阅读 · 4 评论 -
区分++,--的前置和后置的情况
一般而言,前置返回引用,后置返回一个const对象暂时不考虑内置对象的前置和后置等假定有一个类class CInt{public: CInt& operator++(); //前置递增 CInt& operator--(); //前置递减 const CInt operator原创 2017-05-13 18:17:09 · 715 阅读 · 0 评论 -
普通的函数指针
函数指针指向的是函数。和其他的指针一样,函数指针指向某种函数类型,函数的类型由函数的返回类型和形参类型决定,与函数名无关例如://一个比较string长度大小的函数bool stringLengthCompare(const string& left, const string& right);//这个函数的类型是bool (const string& left, const stri原创 2017-05-13 11:14:57 · 293 阅读 · 0 评论 -
封装一个路径选择对话框
class CPathDialog : public CObject{public: CPathDialog(LPCTSTR lpszTitle, LPCTSTR pszInitPath=NULL,HWND hParent=NULL); virtual ~CPathDialog(); int DoModal(); CString GetPathName...原创 2019-07-08 09:03:18 · 251 阅读 · 0 评论 -
c++对mysql的一次简单封装
最近学到了mysql,对mysql进行了一次简单的封装,可后面逐渐修改mysqlOp.h#ifndef __INCLUDE_MYSQLOP_H__#define __INCLUDE_MYSQLOP_H__#include <mysql/mysql.h>#include <vector>#include <string>class MysqlOp...原创 2019-06-16 16:28:02 · 346 阅读 · 0 评论 -
enum强化
enum类型enum类型是一个c/c++的基本类型,它基于c,并在c++上继续使用,c++11在此基础上做了个更好的努力当程序中需要使用特定数值的时候,一般会采用3种方式来实现宏定义#define MALE 0#define Female 1缺点在于它只是预处理阶段的名字,预处理过程中会将代码中MALE,Female全部做替换0或者1,那么有时候会干扰正常代码匿名enum...原创 2019-06-19 17:23:25 · 126 阅读 · 0 评论 -
(void)n;的用处
有时候,声明了一个变量但是却没使用,如下:vector<int> numbers;size_t n = numbers.size();编译的时候,一般会有warning,告诉你有未经使用的变量n。一般的话可以直接忽视掉这种warning。如果有洁癖,可以在下面加一句代码vector<int> numbers;size_t n = numbers.size()...原创 2019-04-07 20:30:31 · 673 阅读 · 0 评论 -
读写excel的相关类
原创 2019-03-26 22:06:00 · 139 阅读 · 0 评论 -
C++中临时变量的生存期
#include <iostream>#include <string>using namespace std;class Foo{public: Foo(); ~Foo(); Foo(const Foo& other); Foo& operator = (const Foo& other);publi...原创 2019-03-26 21:25:43 · 461 阅读 · 0 评论 -
谈论shared_ptr的线程安全性
一个shared_ptr对象可以同时被多个线程同时读取两个shared_ptr对象实体可以被两个线程同时写入,“析构”算写操作如果要从多个线程读写同一个shared_ptr对象,那么需要加锁从这个角度来看,shared_ptr 的线程安全级别和标准库容器差不多,所以在多线程中同时访问一个shared_ptr,象,正确做法是用mutex保护,并且尽量保证临界区范围小shared_ptr是...原创 2018-12-09 21:46:24 · 778 阅读 · 0 评论