可变参数模板
// g++ -std=c++17 -o xx xx.cpp
#include <iostream>
double sum()
{
return 0;
}
template <typename T, typename... Args>
double sum(T v, Args... args)
{
return v + sum(args...);
}
/////////////////////////////////////////
template <typename T, typename... Args>
double sum_super_cool(T v, Args... args)
{
if constexpr (sizeof...(args) == 0) {
return v;
}
return v + sum_super_cool(args...);
}
int main(int argc, char** argv)
{
double s = sum(1, 1.1, 2.2, 3, 4.5);
std::cout << s << std::endl;
double ss = sum_super_cool(1, 1.1, 2.2, 3, 4.5);
std::cout << ss << std::endl;
return 0;
}
平时看到很多的web开发相关的文章,没来得及手动实践,然后各种收藏,终端太多,收藏地方也太多,最后还是不了了之, 现在新建一个文章保持记录相关收集目录及连接,空闲之余实践闭环!
c语言程序:
int g(int x)
{
return x + 3;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(8) + 1;
}
你现在还会觉得 cmake 简单吗?
本章我们将着重介绍系统预定义的 Find 模块的使用以及自己编写 Find 模块,系统中提供 了其他各种模块, 一般情况需要使用 INCLUDE 指令显式的调用,FIND_PACKAGE 指令是一 个特例,可以直接调用预定义的模块。 其实使用纯粹依靠 cmake 本身提供的基本指令来管理工程是一件非常复杂的事情,所以, cmake 设计成了可扩展的架构, 可以通过编写一些通用的模块来扩展 cmake.
在本章,我们准备首先介绍一下 cmake 提供的 FindCURL 模块的使用。然后,基于我们前 面的 libhello 共享库, 编写一个 FindHello.cmake 模块。
前面我们讲到了 cmake 常用的变量,相信“cmake 即编程”的感觉会越来越明显,无论如何, 我们仍然可以看到 cmake 比 autotools 要简单很多。接下来我们就要集中的看一看cmake 所提供的常用指令。 在前面的章节我们已经讨论了很多指令的用法,如 PROJECT,ADD_EXECUTABLE,INSTALL,ADD_SUBDIRECTORY, SUBDIRS,INCLUDE _DIRECTORIES,LINK_DIRECTORIES,TARGET_LINK_LIBRARIES,SET 等。 本节会引入更多的cmake指令,为了编写的方便,我们将按照cmake man page的顺序 来介绍各种指令, 不再推荐使用的指令将不再介绍,INSTALL 系列指令在安装部分已经做 了非常详细的说明,本节也不在提及。 (你可以将本章理解成选择性翻译,但是会加入更多 的个人理解)
前面我们已经提到了,使用${}
进行变量的引用。在 IF
等语句中,是直接使用变量名而不 通过${}
取值
主要有隐式
定义和显式
定义两种,前面举了一个隐式定义的例子,就是 PROJECT
指令,他 会隐式的定义<projectname>_BINARY_DIR
和<projectname>_SOURCE_DIR
两个变 量。
显式定义的例子我们前面也提到了,使用 SET
指令,就可以构建一个自定义变量了。 比如:
SET(HELLO_SRC main.SOURCE_PATHc)
,就PROJECT_BINARY_DIR
可以通过 ${HELLO_SRC}
来引用这个自定义变量了.