赞
踩
举个例子:
std::move
在概念上应该这样实现(实际并不是这么做的):
static_cast<std::remove_reference<decltype(arg)>::type&&>(arg);
意义上,std::move
首先获取它的参数arg
,推断出其类型,移除引用,最后转换为右值引用,移动语义就生效了.
如何移除参数的const
呢?
#include <iostream> #include <type_traits> template <typename T> struct removeConst { using type = T; // (1) }; template <typename T> struct removeConst<const T> { using type = T; // (2) }; int main() { std::cout << std::boolalpha; std::cout << std::is_same_v<int, removeConst<int>::type> << '\n'; // true std::cout << std::is_same_v<int, removeConst<const int>::type> << '\n'; // true }
std::is_same_v<int, removeConst<int>::type>
等同std::is_same<int, removeConst<int>::type>::value
,其中::type
表示编译器推断出来的模板类型
传入int
时,应用removeConst
传入const int
,应用removeConst<const T>
,这样就移除了const
,很好理解
metadata
是编译阶段元函数使用的数据
一共有三种类型:
int
,double
std::vector
以后会详细解释这部分内容
元函数是在编译期执行的函数
元函数:
template <int a , int b>
struct Product {
static int const value = a * b;
};
template<typename T >
struct removeConst<const T> {
using type = T;
};
#include <iostream> int power(const int m, const int n) { int r = 1; for (int k = 1; k <= n; ++k) r *= m; return r; } template <int M, int N> struct Power { static int const value = M * Power<M, N - 1>::value; }; template <int M> struct Power<M, 0> { static int constexpr value = 1; }; int main() { std::cout << '\n'; std::cout << "power(2, 10)= " << power(2, 10) << '\n'; std::cout << "Power<2,10>::value= " << Power<2, 10>::value << '\n'; std::cout << '\n'; }
参数:函数的参数在圆括号里面(...)
,元函数的参数在尖括号里面<...>
返回值:函数返回一个语句,元函数返回一个静态常量值
以后会介绍constexpr
和consteval
例子:
#include <iostream> template <int n> int Power(int m) { return m * Power<n - 1>(m); } template <> int Power<0>(int m) { return 1; } int main() { std::cout << '\n'; std::cout << "Power<0>(10): " << Power<0>(20) << '\n'; std::cout << "Power<1>(10): " << Power<1>(10) << '\n'; std::cout << "Power<2>(10): " << Power<2>(10) << '\n'; std::cout << '\n'; }
下一篇文章介绍
::cout << "Power<1>(10): " << Power<1>(10) << ‘\n’;
std::cout << "Power<2>(10): " << Power<2>(10) << ‘\n’;
std::cout << '\n';
}
下一篇文章介绍
------
[What does “::value, ::type” mean in C++? - Quora](https://www.quora.com/What-does-value-type-mean-in-C)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。