首页
社区
课程
招聘
[分享]《探索现代化C++》泛读笔记摘要19
发表于: 2022-10-1 09:21 7546

[分享]《探索现代化C++》泛读笔记摘要19

2022-10-1 09:21
7546

《探索现代化C++》泛读笔记摘要19

Chapter 元编程

提供和使用类型信息

主要的头文件 <type_traits> 和 <limits>

Type Traits

C++11

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <complex>
#include <vector>
 
using namespace std;
 
template<typename T>
struct Magnitude
{
    using type = T;
};
 
// 偏特化
template<typename T>
struct Magnitude<std::complex<T>>
{
    using type = T;
};
 
template<typename T>
struct Magnitude<vector<T>>
{
    using type = typename Magnitude<T>::type;
};
 
template<typename T>
T inline min_magnitude(const T& x, const T& y)
{
    using std::abs;
    typename Magnitude<T>::type ax = abs(x), ay = abs(y);
    return ax < ay ? x : y;
}
 
int main()
{
    double d1 = 3., d2 = 4.;
    cout << "min |d1, d2| = " << min_magnitude(d1, d2) << '\n';
    std::complex<double> c1(3.), c2(4.);
    cout << "min |c1, c2| = " << min_magnitude(c1, c2) << '\n';
}

C++11 条件异常处理

1
2
3
4
5
6
7
8
#include <type_traits>
 
template <typename T>
inline T clone(const T& x)
noexcept(std::is_nothrow_copy_constructible<T>::value)
{
    return T{ x };
}

一个应用——视图类

使用视图可以减少一些不必要的内存申请和释放,以及一些拷贝操作。

 

书上以矩阵视图类为例。

 

例子中使用了矩阵模板库(MTL)

 

这个项目比较复杂涉及boost,又涉及作者写的矩阵库。

 

关于元编程先跳读,因为迄今为止我还没怎么写过元编程相关的代码。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//