萃取机
具体的来说,traits就是通过定义一些结构体或类,并利用模板类特化和偏特化的能力,给类型赋予一些特性,这些特性根据类型的不同而异。在程序设计中可以使用这些traits来判断一个类型的一些特性,引发C++的函数重载机制,实现同一种操作因类型不同而异的效果。
cplusplus:
This header defines a series of classes to obtain type information on compile-time.
The header contains:
Helper classes: Standard classes to assist in creating compile-time constants.
Type traits: Classes to obtain characteristics of types in the form of compile-time constant values.
Type transformations: Classes to obtain new types by applying specific transformations to existing types.
感觉就是用traits来问到各种各样的type
例:
现在定义一个type_traits可以获得类型的如下属性:
1.是否存在non-trivial default constructor
2.是否存在non-trivial copy constructor
3.是否存在non-trivial assignment operator
4.是否存在non-trivial destructor
1 | struct __true_type { |
1 | template <> |
偏特化版本
1 | template <class _Tp> |
特化版本,比如自定义类型
1 | struct __type_traits<Shape> { |
假设现在用个模板函数fun需要根据类型T是否有non-trivial constructor来进行不同的操作,可以这样来实现:
1 | template<class T> |
- Post link: https://github.com/TheBge/TheBge.github.io/2021/02/05/Type-Traits/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub IssuesGitHub Discussions