c++
文章平均质量分 67
lainegates
think more, code less.
展开
-
c++编译时打开warning-as-error,并在特定情况下关闭某些warning检查
为提升c++代码质量,将所有warning当作error处理,可有效提升代码质量。在cmake中开启的方式如下:其中,打开大部分warning,打开一些特定需求。前者不包含后者。关闭warning有相应语法如下:gcc关闭“有无符号数据对比”检查的warning (即sign-compare)clang关闭“有无符号数据对比”检查的warning (即sign-compare)使用宏关闭特定warning (gcc / clang)定义关闭warning的宏(gcc / clang)使用关闭w原创 2023-08-17 11:51:09 · 3619 阅读 · 0 评论 -
C++概览:工具链、基础知识、进阶及总结
本文简述了C++的工具链、基础概念、进阶及总结原创 2023-03-04 16:59:06 · 1652 阅读 · 1 评论 -
json 与 protobuf.any 互转
最近用到加载配置文件为 protobuf 的功能,因为多配置,需要使用protobuf.any功能。问题:写好json后,json 中的内容对应 protobuf.any 的部分无法正常解析网上搜索许久,最后还是鼓哥给力,一下找到了结果。解决方法:protobuf.any的实现原理为封装的protobuf.message转换的串+此message的类型(即type)。因此,官方的方案很直接,在对应protobuf.any部分的json串,添加一个json项@type,内容为type.googl原创 2021-12-06 16:51:38 · 2372 阅读 · 0 评论 -
ROS 的服务创建与运行示例
参考ROS官网Wiki—创建ROS消息和服务ROS官网Wiki—编写简单的服务和客户端(C++)ROS官网Wiki—检验简单的服务和客户端前置ROS 的逻辑视图文章目录服务消息的定义定义服务文件设置srv文件的编译信息查看生成的srv信息发布者代码客户端代码构建节点检验节点运行服务运行客户端示例代码很直观,直接上代码服务消息的定义首先进入创建的包$ roscd beginner_tutorials$ mkdir srv定义服务文件定义服务消息srv文件``,内容为如下,---上为原创 2021-10-25 18:39:10 · 390 阅读 · 0 评论 -
qt 处理中文目录
近来用qt时,需要读取中文目录,但总是读取失败。仔细查了后,找到了原因。问题:windows的默认编码是ansi。windows下,IDE不同,debugger采用的编码也不同QString默认使用是unicode,QString::toStdString(),这个操作是把utf16(也可能是utf32)变成utf8编码,不是ansi编码Qt 和 std 并不考虑文件的编码,而是判断操作系统的默认编码参考使用QString类进行编码转换Unicode、UTF-8、UTF-16之间的区别原创 2021-04-16 20:22:51 · 774 阅读 · 0 评论 -
解决 vc++ stl 实例化类多重定义的bug LNK2005 LNK1169
今天引用外部库时,又遇到了老朋友。a.lib(A.dll):-1: error: LNK2005: "public: __cdecl std::vector<double,class std::allocator<double> >::~vector<double,class std::allocator<double> >(void)" (??1?$vector@NV?$allocator@N@std@@@std@@QEAA@XZ) 已经在 B.cpp.o原创 2020-09-10 19:24:32 · 421 阅读 · 0 评论 -
稀疏超大型线性方程组求解
笔者近期工作需要求解线性方程组,但基本不懂线程方程组求解,本来寄希望于Eigen,结果发现稠密矩阵方面,Eigen在功能还算全面(虽然经网友对比,Eigen慢于OpenBLAS和Intel MKL),稀疏矩阵方面,着实差了点,自带的几个求解器,按官网推荐,尝试了SimplicialLLT和BiCGSTAB ,笔者的方程组严格对称且对角线绝对占优,但SimplicialLLT慢得不能用,BiC...原创 2018-11-04 17:18:37 · 10313 阅读 · 4 评论 -
windows 下visual studio 2015编译64位xerces库
准备: 安装cmake 下载xerces代码 打开VS2015的x64命令行,进入代码目录mkdir buildcd buildcmake -G "Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX=${xerces代码目录}cmake --build . --config Debugctest -V -C Debug -j 4原创 2018-02-02 07:02:32 · 2387 阅读 · 1 评论 -
linux 手动升级 g++-6
因工作需要,得升级下g++。 本机g++版本是4.8 想升级到g++6。由于网络问题,不能添加PPA,所以只能手动编译。第一步,编译并安装g++-6编译g++6的脚本如下:# 下载源码到 "~/Downloads" 目录wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2tar -jxvf gcc-6.1...原创 2018-01-08 14:43:51 · 3060 阅读 · 1 评论 -
c++避免隐式转换
C++有一个很方便的功能—隐式转换,比如有一个函数void func(double f);调用它的时候func(5);func(5.0);都是有效的。但有时候,这个功能就很麻烦了。比如:class A{ public: A(const string&v){ ///... }}void ...原创 2016-01-28 11:00:40 · 5827 阅读 · 2 评论 -
怎么在Release模式下调试代码
(适用VS2005/VS2008)在当前工程点击右键选择properties,选择 All ConfigurationsC++>General->Debug Information Format->Program Database (/Zi)C++>Optimization->Optimization->Disabled (/Od)Linker->Debugging->Genera转载 2013-11-17 10:46:06 · 1515 阅读 · 0 评论 -
vs2008 c++ 拼写检查
看着使用 visual studio 2008 编写c#程序时的各种代码提示 , 让使用vs2008编写c++代码什么提示也没有的我看着是羡慕忌妒恨。今天终于找到了好东西。 visual assist X , visual studio 的插件,非常的好用啊。拼写检查,完善的输入提示。下载地址:http://ishare.iask.sina.com.cn/f/5868834.html原创 2013-01-04 15:27:33 · 2647 阅读 · 0 评论 -
C获取当前工作目录 修改当前工作目录
#include #include #include int main( int argc,char *argv[] ){char path[_MAX_PATH];FILE *fp;int i;_getcwd(path,_MAX_PATH);printf("当前工作目录:\n%s\n",path);if( ( _chdir("d:\\visual c++")转载 2013-08-20 09:03:39 · 2356 阅读 · 0 评论 -
Eigen性能测试
我在代码里使用了 Eigen,发现程序很慢,于是我用性能分析器分析,eigen竟然耗时一半有余。。。而且最耗时的是Eigen::Vector3d对象的创建 / 销毁 / normalize() / 赋值 等最最基本的操作,我感觉眼睛有点发黑。于是赶紧上网查这是怎么回事,网上给出解释,Eigen做了很多检查,在release模式的时候,就不检查了。舒了一大口气。网友同时指出,使用宏 EIGEN...原创 2020-04-28 08:54:24 · 2220 阅读 · 5 评论 -
cmake 中使用 protobuf 生成文件
protobuf 提供了自动生成文件的功能,我直接看的cmake文件,里面没说函数说明,我没有全部弄明白,但可以正常使用:add_library(myTarget ${src})protobuf_generate( TARGET myTarget EXPORT_MACRO myExports PROTOC_OUT_DIR ${CMAKE_CURRENT_SOURCE_...原创 2020-02-14 20:28:52 · 3778 阅读 · 1 评论 -
解决QtCreator Unable to create a debugging engine
今天用qtcreator,遇到一个神奇的bug上网查看,大多数是说没有安装 windows debugger,这个过程详见 qt5 下载 及 qtcreator集成msvc2017 x64 。但我明确设定了windows debugger (cdb.exe),为什么还是提示这个错误呢?又仔细测试很多遍简单例子 (只有一个main.cpp),终于发现,原来是Kits设错了,见下图qtcre...原创 2019-11-17 15:08:53 · 3524 阅读 · 0 评论 -
C++ define用法
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析1.1 #define的概念#define命令转载 2013-06-28 15:19:11 · 1170 阅读 · 0 评论 -
qt5 下载 及 qtcreator集成msvc2017 x64
下载qt 5.12路径下载 qtcreator路径qt release路径原创 2019-04-26 19:19:44 · 4255 阅读 · 0 评论 -
C++ 部分warning的解决办法
C++的warning可以不管理,但遇到极特殊的情况,可能会出bug,比如double转int。本贴记录一些C++ warning的解决办法Deprecated implicitely-declared copy constructor如果定义了析构函数,那么会提示此warning,提供复制构造函数可解决此问题。解决办法:class A{public: A(){} A(cons...原创 2019-05-07 16:04:51 · 1553 阅读 · 0 评论 -
C++ 测试驱动开发
看到一篇非常好的C++测试驱动开发文章,这里转载下。测试驱动开发(TDD)背景及综述测试驱动开发是 Kent 提出的一种新的软件开发流程,现在已广为人知,这种开发方法依赖于极短重复的开发周期,面对开发需求,开发人员要先开发代码测试用例,这些代码实现的测试用例定义了工程要实现的需求,然后去开发代码快速测试通过这这些用例,这个时候的代码是相对比较粗糙的,只是为了通过这个测试,测试通过以后,这些测试...转载 2019-05-18 09:10:27 · 1057 阅读 · 0 评论 -
C++嵌套类使用注意事项
想在代码里通过嵌套类作为迭代器,访问外层类的数据。主要是为了避免在头文件中包含STL头文件,编译时间伤不起然后出现了神奇的bug,简化后代码如下:class A {public: class B { public: explicit B(void):idx(3){} B(const B&b) { idx = ...原创 2019-06-04 21:43:50 · 874 阅读 · 0 评论 -
vs2017 编译 ogre x64
在windows上要用ogre。之前是vs2015版本,编译好的,直接用了。这次上官网看只有vs2017_x64版本的,下载试用,发现建立 Ogre::Root的时候就错了。只能自己编译了。我编译的是ogre 1.10.11 版本。ogre 经常修改 API,如果某个版本代码工作正常,最好不要换版本,否则要修改非常久。。。说下编译的坑:坑一:编译x64版本的不要让ogre自动下载依...原创 2019-07-09 17:02:27 · 1069 阅读 · 0 评论 -
VTK 二维字体渲染
最近乃至了VTK,去官网下载了最新的realse 8.2.0。编译成功后,开始写实现代码,参考网上的实现得到以下代码 double pts[][3] = {{0,0,0}, {1,0,0}, {0,1,0}}; vtkSmartPointer<vtkPoints> points = vtkPoints::New(); vtkSmartPointer<vt...原创 2019-08-01 22:18:34 · 623 阅读 · 0 评论 -
cmake qt5
项目使用cmake构建,用到了qt5,这里记录下。qt5的cmake配置脚本cmake_policy(VERSION 3.9)project(Demo VERSION 0.1)cmake_minimum_required(VERSION 3.9)set(CMAKE_CXX_STANDARD 11)set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE...原创 2019-09-27 21:43:51 · 988 阅读 · 0 评论 -
cmake 处理 dllexport
cmake处理dllexport十分方便,总体分两步。在cmake文件中配置宏GENERATE_EXPORT_HEADER是cmake提供的函数,用来生成dllexport头文件。使用方法如下:GENERATE_EXPORT_HEADER( myDLL # dll文件名 EXPORT_MACRO_NAME MYDLLExports # export 宏 EXPORT_FILE_NAM...原创 2018-11-09 16:41:30 · 3580 阅读 · 0 评论 -
导出c++模板
笔者写的代码要求跨平台,在linux测试通过的代码,在windows下有问题。主要在两项,一个是windows平台要求的__declspec(dllexport),另一个就是模板函数与类。第一项,使用cmake可以获得完美的解决方案,本文主要说第二项。目前导出模板函数,已经试验成功。导出模板类也类似。windows的编译机制里,只是声明模板函数,编译器不知道数据类型,无法定义函数,所以此时只...原创 2018-11-09 16:34:28 · 2853 阅读 · 0 评论 -
使用c++ 的stream遇到的问题
c++的stream系列类是c++复杂性的一个体现点。总体来讲,复杂性安全性超过c,但速度低于c。 我是由于处理的数据量小,但数据形式不固定,而c++的stream有助于格式检查,所以使用了c++的stream。下面开始。1.状态判断问题我使用的代码大致是:string str;stringstream ss;ifstream infile;int a;..原创 2015-01-20 21:40:32 · 1694 阅读 · 0 评论 -
template class 随笔
template class可以节省大量的时间,其在预x原创 2014-09-03 22:38:17 · 1155 阅读 · 2 评论 -
c++ 测试框架选择
实际工作中免不了要测试c++代码,选择一个好的测试框架原创 2014-09-05 08:59:28 · 1277 阅读 · 0 评论 -
python/c++接口库比较(SWIG,boost.python, pycxx, py++, sip, Weave, Pyrex )
目前有很多开源的python/c++ 绑定工具,搜了好多岾子,这里稍微总结下。SWIG支持 Python 2 and 3配置正确的话,可以全自动完成封装(*.i文件需要自己写)当不是全自动的时候,它大多会重复你的.h文件并给出提示除了Python外,还支持其他语言(Java, Ruby, Lua, 等)输出一个本地文件(这个文件会被编译成.pyd)和一个封装(这原创 2014-02-20 18:34:35 · 9009 阅读 · 2 评论 -
c++ 处理大文件
最近写一个小工程,要读写大文件,10~20G。开始经过一番考虑,考虑到c函数的高效与操作难度(以前用c的函数,总忘关文件)。直接使用了C++的ifstream,用类操作比较方便。由于随机读取文件位置,所以需要找办法能读取到任一位置,这在处理小文件时没有问题,但在处理大于4G文件时出现了问题。以前在linux下,没多考虑什么,c和c++处理大于4G文件都没有问题,现在才知道原来是64位lin原创 2013-08-06 15:36:19 · 12093 阅读 · 1 评论 -
判断线段相交
先判断两条线段是否不平行(最好同时判断是否有交点并且不平行,因为浮点运算不精确),然后计算两条线段的交点。以下是C语言代码:#include#include#define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)struct point{double x,y;};//计算交叉乘积(P1-P0)x(P2-P0)double xmu转载 2013-05-09 13:50:35 · 1200 阅读 · 0 评论 -
QTableWidget 应用总结
本文引用自:http://blog.sina.com.cn/s/blog_9c41e8ed01011mma.htmlQTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。它跟QTabelView的区别:QTableWidget是QTableView的子类,QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setMode转载 2012-12-14 17:01:25 · 2098 阅读 · 0 评论 -
boost.python vector_indexing_suite 使用注意事项
今天使用boost.python封装一个vector,出现了错误。代码大致如下:class Point{public: Point( double xt , double yt ):x(xt) , y(yt){} double getX(){ return x; } double getY(){ return y; } double x ; double y ;};原创 2012-10-23 13:13:31 · 3496 阅读 · 0 评论 -
boost.python 初级教程
python便于快速开发,并且python底层是c,与c的兼容性非常好,用python快速开发,用c++开发性能要求较高的模块是一个非常理想的选择。python自带一个ctypes,使用非常方便,但是不支持c++的类,swig使用又比较繁锁,幸好还有boost.python,使用非常方便,并且可以导出类!boost.python的安装:我的环境是win7 x64 + vs2原创 2012-09-22 22:06:30 · 4561 阅读 · 0 评论 -
Visual Studio下包含多项目的解决方案及项目间引用
一般的解决方案都包含两个以上项目。其中一些生成dll等链接库,一些生成应用程序。本文简单介绍了如何创建包含多个项目的解决方案。 1). 参考http://blog.sina.com.cn/s/blog_6e0693f70100sn4a.html一文,执行此文中的步骤1)到步骤6),建立dll文件。 2). 在解决方案资源管理器中右键单击解决方案图标,Add ->转载 2012-06-28 23:00:05 · 9746 阅读 · 0 评论 -
提升c++效率要点
本帖记录在网查到的别人的帖子,也会记录自己一些感悟http://www.jb51.net/article/54792.htmhttp://blog.csdn.net/ixidof/article/details/5306997http://blog.jobbole.com/67880/原创 2015-03-27 15:59:32 · 1026 阅读 · 0 评论 -
c++判断当前系统及编译器
查看当前系统http://nadeausoftware.com/articles/2012/01/c_c_tip_how_use_compiler_predefined_macros_detect_operating_system查看当前编译器http://nadeausoftware.com/articles/2012/10/c_c_tip_how_detect_compiler原创 2015-08-16 21:55:04 · 3577 阅读 · 0 评论 -
OpemMP知识点
网上找到两个好帖子,不重复写了OpenMP共享内存并行编程详解OpenMP编程总结表另,多线程需要计时,不能使用clock()函数,它会计算所有线程的时钟周期,时间会长得多,要使用omp_get_wtime()。参见omp_get_wtime()函数...转载 2018-11-03 10:36:35 · 549 阅读 · 0 评论 -
cmake 获取已添加的目录
在include_directories()后,获取已经添加的目录get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)foreach(dir ${dirs}) message(STATUS "dir='${dir}'")endforeach()...原创 2018-05-15 16:05:24 · 2819 阅读 · 0 评论