c++模版笔记(3)
2023-06-13 09:13:58 时间
本篇介绍
本篇继续C++的模版介绍
std::invoke
以一种统一形式调用函数和传递参数:
void foreach (Iter current, Iter end, Callable op, Args const&... args)
{
while (current != end) {
std::invoke(op,
args...,
*current);
++current;
}
}
如果需要返回值, 可以这样操作:
template<typename Callable, typename... Args>
decltype(auto) call(Callable&& op, Args&&... args)
{
return std::invoke(std::forward<Callable>(op),
std::forward<Args>(args)...);
}
如果遇到了返回值是void就不行了,需要使用条件编译区分下。
std::addressof()
防止有的类重载 & 运算符,用 std::addressof() 可以一定拿到地址。
std::declval()
类型占位符,不需要创建对象, 用在不需要计算的上下文中,比如decltype或sizeof。
#include <utility>
template<typename T1, typename T2,
typename RT = std::decay_t<decltype(true ? std::declval<T1>()
: std::declval<T2>())>>
RT max (T1 a, T2 b)
{
return b<a?a:b;
}
模版模版参数匹配
对于模版模版参数,c++ 17之后的版本也支持用一个参数包支持多个参数,不需要匹配每个参数。
template<typename T1, typename T2,
template<typename... > class Cont>
class Rel { ...
// Cont expects any number of // type parameters
};
Rel<int, double, std::list> rel;
相关文章
- C++学习——c++逗号操作符说明(附加全部运算符优先级)
- C++项目贪吃蛇游戏笔记-项目代码
- C++系列笔记(七)
- C++系列笔记(十一)
- EasyC++54,名称空间其他特性
- EasyC++78,动态联编
- 【笔记】《深入理解C++11》(下)
- c++之复合类型笔记(一)
- c++之数据处理笔记(二)
- C++ hashmap benchmark
- C++模版笔记(2)
- C++构造函数的作用_c++什么是构造函数
- C++数组搜索(二分法)
- c++模版笔记(4)
- C++11学习笔记3
- C/C++与Python双剑合璧
- C++结构体和类的区别_c++有结构体吗
- c++的链表-C++链表
- C/C++ 操作数组与指针笔记
- C/C++ Qt 数据库SqlRelationalTable关联表
- c 线程安全的单例模式-C++单例模式(线程安全、内存释放)
- C++面向对象程序设计(谭浩强)第三章 怎样使用类和对象 第一节学习笔记
- C++面向对象程序设计(谭浩强)第三章第10~11节学习笔记
- c++基础篇之C++ 模板
- xcode c++
- c++学习笔记详解编程语言
- C++虚析构函数详解
- C++ setw:格式化输出(详解版)
- C++Primer笔记之关联容器的使用详解
- 深入C++拷贝构造函数的总结详解
- c/c++语言位域注意事项分析
- C++实现inlinehook的原理及应用实例