Decorative image frame

-sky-

我有一个梦想,陶醉在绿水青山的故乡

-sky-

Docker入门

tldr;

  • docker images 查看当前本地所有的镜像
  • docker ps 当前所有创建的容器状态
  • docker pull image_name 从官方仓库拉取镜像
  • docker exec -it --name [container_id | container_name] bash 交互式连接一个正在运行的容器
  • docker rm container_id 删除一个容器
  • docker [start|stop|restart] container_id 启动、停止、重启一个容器
Read More...

Conan使用入门

tl;dr

Conan 是C++的一个包管理工具,使得C++安装第三方库变的很方便。 类似于vs的NuGet

Conan的基本命令:

  • 查找库: conan search poco --remote=conan-center

  • 安装库:conan inspect poco/1.9.4

  • 安装到项目:conan install ..

  • conanfile.txt样例:

    1
    2
    3
    4
    5
    [requires]
    poco/1.9.4

    [generators]
    cmake
  • CMakeLists.txt 插入内容:

    1
    2
    include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
    conan_basic_setup()
Read More...

更新安装到WSL2

tl;dr

必须是18917或更高版本:

powershell管理员运行:

1
2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

检查当前使用的bash名

1
wsl -l

设置版本:

1
2
wsl --set-version <Distro> 2
wsl --set-default-version 2

其中<Distro> 替换成对应的bash名字

Read More...

Pimpl 模式

​ Pimpl (pointer to implementation) 是一种将接口和具体的实现分开的一种方式,优化编译时间,保护封装实现的一种经验技巧。

tl;dr

​ 就是说模块对外接口类里面不放实现,而是保存一个指针, 指向真正实现的类。然后在接口类里面同名方法通过指针调用真正实现方法。

Read More...

GTest单元测试框架的基本使用

GTest

简介: google的单元测试框架

tl;dr

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <gtest/gtest.h>

int add(int a, int b)
{
return a+b;
}

TEST(TestFun, Add) {
EXPECT_EQ(add(1, 1), 2);
EXPECT_EQ(add(1, 2), 2) << "add (1, 2) 应该是 " << 3 << "是的的结果是 " << add(1, 2);
ASSERT_EQ(add(2, 2), 4);
}

有一个被测试的方法, add, 通过TEST添加一个测试案例, 可以使用EXPECT和ASSERT两种宏, 实现测试值是否正确, 每个宏后面都可以跟上解释信息。 其中第二个很明显是错误的, 输出结果看下面。

编译命令g++ file.cpp -lgtest -lgtest_main -lpthread -o main

其中用到了三个动态链接库, 第一个是gtest的库, 第二个是运行所有测试的实现, 其实里面就是写了个main函数, 也可以自己写,不连接这个库, 第三个是多线程库, 因为gtest使用了线程。

运行结果:

1573372797119

可以看到失败的地方会有提示。

Read More...