SFINAE应用场景: 检测成员
在C++编程中,Substitution Failure Is Not An Error(SFINAE)是一种强大的技术,允许我们在编译时根据类型特征选择不同的实现。这个特性在许多现代C++库和框架中被广泛使用,其中之一是在处理不同结构的通用接口时。
让我们看一个简单而实用的例子,通过检查类型是否具有特定成员来优雅地处理不同结构的通用接口。在这个例子中,我们将使用SFINAE来检查类型是否包含名为 ‘header’ 的成员,并相应地执行不同的处理。
在C++编程中,Substitution Failure Is Not An Error(SFINAE)是一种强大的技术,允许我们在编译时根据类型特征选择不同的实现。这个特性在许多现代C++库和框架中被广泛使用,其中之一是在处理不同结构的通用接口时。
让我们看一个简单而实用的例子,通过检查类型是否具有特定成员来优雅地处理不同结构的通用接口。在这个例子中,我们将使用SFINAE来检查类型是否包含名为 ‘header’ 的成员,并相应地执行不同的处理。
strace
是一个用于跟踪程序执行过程中系统调用的工具。它可以捕获程序与内核之间的交互,包括文件操作、进程控制、网络通信等,为开发者提供了深入了解程序行为的途径。通过 strace
,你可以追踪到程序的每一步,查看系统调用的参数、返回值以及执行时间等关键信息。
在大多数 Linux 发行版中,strace
可以通过包管理工具进行安装。例如,在 Ubuntu 中,可以使用以下命令安装:
1 | sudo apt-get install strace |
最基本的使用方式是在命令行中直接运行 strace 并指定待跟踪的命令。
1 | strace ls |
通过 -o
参数,你可以将 strace
的输出保存到文件中,以便后续分析。
1 | strace -o output.txt ls |
std::decay_t
是一个类型转换工具,它接受一个类型,并将其转换为对应的”衰减类型”。所谓”衰减类型”指的是将某个类型以如下方式处理得到的类型:
以下是一个使用std::decay_t
的例子:
1 |
|
比如对 app 目录进行压缩备份,带上密码,可以使用以下操作
1 | tar -czvf - /app | openssl enc -aes-256-cbc -e > backup.tar.enc |
解释一下以上命令:
tar -czvf - /app
将/app目录压缩成一个tar包,并将其输出到stdout。openssl enc -aes-256-cbc -e
将stdin中的数据用AES-256-CBC算法进行加密,并将加密后的数据输出到stdout。> backup.tar.enc
将stdout中的数据输出到backup.tar.enc文件中。1 | !/bin/bash |
脚本中涉及到一些路径的时候可以用绝对路径,这样可以再任意地方执行脚本。而不用 cd 到固定的目录
1 | ## 获取脚本自身所在目录绝对路径 |
1 | # 获取目录名 |
1 | # 获取环境变量 VAR 的值,如果没有则是 default_value |
某些 CI/CD 流程中可能会涉及到一些多行字符串,需要对换行符进行特殊处理,比如转义
1 | # 原始字符串 |
1 | (COMMOND &) |
同 nohup COMMOND &