Metafunction
“metafunction”即“元函数”,它用于template meta-programming。
本质上来说,它并不是function,但是从功能上来看,它类似于function:
用途一: metafunction是一个抽象的interface,或者说,它是一种抽象,通过它,可以获取模板参数的信息,因为我们可以认为它是在compile-time“执行”的函数,这也是它称为metafunction的原因。最最典型的metafunction就是:trait。
NOTE: metafunction还是可以实现其他功能,后续补充。
Example
trait
前面已经提及了trait,关于trait,参见C++\Idiom\Templates-and-generic-programming\SFINAE-trait-enable-if
。
std::enable_if
在cppreference std::enable_if
中的介绍如下:
This metafunction is a convenient way to leverage SFINAE to conditionally remove functions from overload resolution based on type traits and to provide separate function overloads and specializations for different type traits.
std::void_t
在cppreference std::void_t
中的介绍如下:
Utility metafunction that maps a sequence of any types to the type void
cppreference Utility library#Type support#Metafunctions
在cppreference 中介绍了metafunction。
Implementation
metafunction是基于C++ template的,所以它的实现是基于C++ template的实现的,参见C++\Language-reference\Template\Implementation
。