<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Lasuerte的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Lasuerte</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Lasuerte]]></copyright><item><title><![CDATA[C++11 线程池]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/106732092</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/106732092</guid><author>Lasuerte</author><pubDate>Sat, 13 Jun 2020 14:42:59 +0800</pubDate><description><![CDATA[#include &lt;cstdlib&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;thread&gt;
#include &lt;vector&gt;
#include &lt;queue&gt;
#include &lt;mutex&gt;
#include &lt;condition_variable&gt;
#include &lt;atomic&gt;
#i.]]></description><category></category></item><item><title><![CDATA[linux下拷贝动态库遇到的问题]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/106398140</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/106398140</guid><author>Lasuerte</author><pubDate>Thu, 28 May 2020 10:20:16 +0800</pubDate><description><![CDATA[linux默认cp命令是有别名的，也就是说在执行cp命令的时候，实际上执行的是别名的命令。

通过alias命令可以查看当前系统的别名设置情况：

可以看到cp命令已经设置了别名。这样即使使用cp -f也不会生效。

\cp会调用原生cp命令不使用别名，因此能达到效果。

除了\cp外还有一种写法：

#unalias cp

#cp -rf ***

首先取消别名，然后再调用。unalias命令不是永久生效的。

===========
通过ln -s 创建软链接语法为：
ln -s 源文件路径 软链接文]]></description><category></category></item><item><title><![CDATA[类模板内的static成员变量]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/106262247</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/106262247</guid><author>Lasuerte</author><pubDate>Thu, 21 May 2020 17:13:53 +0800</pubDate><description><![CDATA[类模板内的static成员变量是在需要用的时候才会去调用类外初始化，否则实例化子类后，直接调用b的成员函数等时，会报错undefined reference


#include &lt;iostream&gt;
using namespace std;
template &lt;typename T&gt;
class CTest {
public:
    class B {
    public:
    B()
    {
        cout &lt;&lt; "construct B" &l]]></description><category></category></item><item><title><![CDATA[C++ 委托学习笔记]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/106094012</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/106094012</guid><author>Lasuerte</author><pubDate>Wed, 13 May 2020 11:17:11 +0800</pubDate><description><![CDATA[class A{

public:

 void Func(int){...}

};

要取得Func函数指针，void (A::*pFunc)(int)=&amp;A::Func;

::*是一个特殊操作符，表示pFunc是一个指针，指向A的成员。获取成员函数的地址不能通过类对象来获取，必须通过类名获取，而且要加上取地址操作。

那么如果通过指针来调用该函数，成员函数都隐含了一个this参数，表示函数要操作的对象，我们只获取了函数的指针，还缺少一个对象作为this参数，为了这个目的...]]></description><category></category></item><item><title><![CDATA[C++ 类型转换]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/106077836</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/106077836</guid><author>Lasuerte</author><pubDate>Tue, 12 May 2020 15:44:40 +0800</pubDate><description><![CDATA[Let’s begin with a review of casting syntax, because there are usually

three different ways to write the same cast. C-style casts look like this:


			(T) expression
			
			
			// cast expression to be of type T
			
		
			Function-style casts use this syn]]></description><category></category></item><item><title><![CDATA[【转】C/C++中可变参数的详细介绍(va_list,va_start,va_arg,va_end)]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/105806738</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/105806738</guid><author>Lasuerte</author><pubDate>Tue, 28 Apr 2020 09:55:54 +0800</pubDate><description><![CDATA[可变参数的函数原理其实很简单,而va系列是以宏定义来定义的,实现跟堆栈相关.我们写一个可变函数的C函数时,有利也有弊,所以在不必要的场合,我们无需用到可变参数。如果在C++里,我们应该利用C++的多态性来实现可变参数的功能,尽量避免用C语言的方式来实现。

 由于在C语言中没有函数重载，解决不定数目函数参数问题变得比较麻烦，即使采用C++，如果参数个数不能确定，也很难采用函数重载。对这种情况，提...]]></description><category></category></item><item><title><![CDATA[linux x86_64 下编译grpc总结]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/105527540</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/105527540</guid><author>Lasuerte</author><pubDate>Wed, 15 Apr 2020 09:45:21 +0800</pubDate><description><![CDATA[grpc库的编译需要依赖多个三方库，官方建议通过./.gitmodules去获取依赖库，但我的linux环境是不能联网的，必须离线安装。

查看./.gitmodules文件，其实是去github把代码拉取到gprc的thirdparty/对应的目录下，具体如下



将编译过程中缺少的三方库在windows下载好，拷贝至对应的目录即可

编译过程中会报错unrecognized command ...]]></description><category></category></item><item><title><![CDATA[Parallel Quicksort using a stack of pending chunks to sort]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/105097040</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/105097040</guid><author>Lasuerte</author><pubDate>Wed, 25 Mar 2020 15:50:46 +0800</pubDate><description><![CDATA[代码源自C++ Concurrency in Action Second Edition


#include &lt;list&gt;

template&lt;typename T&gt;
struct sorter
{
    struct chunk_to_sort
    {
        std::list&lt;T&gt; data;
        std::promise&lt...]]></description><category></category></item><item><title><![CDATA[通过递归打印组合]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/104668505</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/104668505</guid><author>Lasuerte</author><pubDate>Thu, 05 Mar 2020 09:52:38 +0800</pubDate><description><![CDATA[void PrintNum(int nNum, std::vector&lt;int&gt;&amp; vecNums);
void PrintNumOut(int nNum)
{
    std::vector&lt;int&gt; vecNums{ 0,0,0,0 };
    PrintNum(nNum, vecNums);
}


void PrintNum(int nNum, s...]]></description><category></category></item><item><title><![CDATA[C++的future，promise，packaged_task]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/103978206</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/103978206</guid><author>Lasuerte</author><pubDate>Wed, 15 Jan 2020 10:34:08 +0800</pubDate><description><![CDATA[1. future与async配合使用

个人理解就是用future获取该线程函数的返回值，并可以知道该线程函数何时执行完；


#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;thread&gt;
#include &lt;future&gt;

unsigned long long CalcuBigNum(unsig...]]></description><category></category></item><item><title><![CDATA[C++11 并发指南三(Lock 详解)]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/103597678</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/103597678</guid><author>Lasuerte</author><pubDate>Wed, 18 Dec 2019 14:49:06 +0800</pubDate><description><![CDATA[文章转自https://www.cnblogs.com/haippy/p/3346477.html感谢大佬 侵删



在 《C++11 并发指南三(std::mutex 详解)》一文中我们主要介绍了 C++11 标准中的互斥量(Mutex)，并简单介绍了一下两种锁类型。本节将详细介绍一下 C++11 标准的锁类型。

C++11 标准为我们提供了两种基本的锁类型，分别如下：

std::lo...]]></description><category></category></item><item><title><![CDATA[“最令人头痛的语法解析”(C++’s most vexing parse)]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/103522743</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/103522743</guid><author>Lasuerte</author><pubDate>Fri, 13 Dec 2019 10:53:46 +0800</pubDate><description><![CDATA[如果你传递了一个临时变量，而不是一个命名的变量；

C++编译器会将其解析为函数声明，而不是类型对象的定义。
例如：


std::thread my_thread(background_task());


这里相当与声明了一个名为my_thread的函数，这个函数带有一个参数(函数指针指向没有参数并返回background_task对象的函数)，返回一个 std::thread 对象的函数，而...]]></description><category></category></item><item><title><![CDATA[Effective C++ 条款25]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/102628200</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/102628200</guid><author>Lasuerte</author><pubDate>Fri, 18 Oct 2019 16:41:04 +0800</pubDate><description><![CDATA[25


namespace WidgetFunc 
{

    template &lt;typename T&gt;
    class Widgett
    {
    public:
        template &lt;typename T&gt;
        Widgett(T* pcObj, size_t size)
        {
            m_pcO...]]></description><category></category></item><item><title><![CDATA[C++中大数运算简单处理]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/102495348</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/102495348</guid><author>Lasuerte</author><pubDate>Fri, 11 Oct 2019 09:48:37 +0800</pubDate><description><![CDATA[这里说的是在数据类型表示范围内的处理，如果是非常大的数，可以封装bignumber用字符串运算。



遇到问题是


unsigned long long int = 1024*1024*1024*4;

用一个超级大的类型在32位程序上，只要超过int表示范围也会变为0，因为右边的默认为int操作，所以需要指定类型：

u :表示无符号整形(unsigned)
l:表示long类型...]]></description><category></category></item><item><title><![CDATA[C++模拟鼠标键盘操作（转）]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/102495187</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/102495187</guid><author>Lasuerte</author><pubDate>Fri, 11 Oct 2019 09:39:22 +0800</pubDate><description><![CDATA[API 或 MFC 视窗程序 里 有 函数，

例如 API  函数  设位置：

BOOL SetCursorPos( int x, int y); 

参数是屏幕坐标x,y

头文件 Winuser.h

链接库 #pragma comment (lib, "User32.lib")

 

或取位置 GetCursorPos(&amp;p);

显示鼠标 int ShowCursor( B...]]></description><category></category></item><item><title><![CDATA[linux下计算pod的cpu利用率与mem使用情况]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/98513343</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/98513343</guid><author>Lasuerte</author><pubDate>Mon, 05 Aug 2019 20:03:11 +0800</pubDate><description><![CDATA[一、计算CPU利用率（计算方式与top指令源码方式相同）

1.计算宿主机的cpu核数

2. 从文件中读取本身进程的一段时间使用情况，即隔一段时间分别获取使用情况，通过这段时间的（使用时间）/（总时间），即可得到cpu利用率，代码如下：




#include "stdlib.h"
#include "stdio.h"
#include "unistd.h"
#include &lt;ios...]]></description><category></category></item><item><title><![CDATA[linux下，C++编译报错 undefined reference to "XXX"]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/91988924</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/91988924</guid><author>Lasuerte</author><pubDate>Fri, 14 Jun 2019 17:20:07 +0800</pubDate><description><![CDATA[在编译工程的时候遇到了这个问题，前提是头文件与库文件都是正确的，且CMakeLists.txt已将库和头文件配置进去了，结果编译时仍然报错无法解析的外部符号，究其原因，是因为库之间存在依赖关系，写CMakeLists时，需要将被依赖的库写在后边，将库的依赖顺序调整好后，编译通过。
...]]></description><category></category></item><item><title><![CDATA[C++11中的右值引用]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/89929375</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/89929375</guid><author>Lasuerte</author><pubDate>Tue, 07 May 2019 20:59:41 +0800</pubDate><description><![CDATA[个人理解

就是用一个变量引用一个右值，比如将亡值，以延长其生命周期。

变量引用的是右值，不过变量本身还是个左值。


#include &lt;iostream&gt;

struct MyString
{
    MyString()
    {
        m_szStr = 0;
        m_size = 0;
    }
    MyString(char* str)
  ...]]></description><category></category></item><item><title><![CDATA[type_traits学习]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/89883258</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/89883258</guid><author>Lasuerte</author><pubDate>Mon, 06 May 2019 17:30:50 +0800</pubDate><description><![CDATA[获取T的原始类型，我们通过std::remove_reference移除引用，需要获取智能指针指向的对象时需要对原始类型U添加左值引用。


#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;memory&gt;

template &lt;typename T&gt;
struct Const...]]></description><category></category></item><item><title><![CDATA[win32模拟鼠标动作]]></title><link>https://blog.youkuaiyun.com/Lasuerte/article/details/89840700</link><guid>https://blog.youkuaiyun.com/Lasuerte/article/details/89840700</guid><author>Lasuerte</author><pubDate>Sun, 05 May 2019 10:37:01 +0800</pubDate><description><![CDATA[#include&lt;iostream&gt;
#include&lt;windows.h&gt;
#include &lt;thread&gt;
#include &lt;functional&gt;

using namespace std;

void thMoveMouse()
{
    POINT p;
    while (1) {
        GetCursorPos(&a...]]></description><category></category></item></channel></rss>