C++模板元编程是一种典型的函数式编程,函数在整个编程体系中处于核心的地位。
这里的函数与一般C++程序中定义的函数有所区别,其更接近数学意义上的函
数——是无副作用的映射或变换:在输入相同的前提下,多次调用同一个函数,得到的结
果是相同的,深度学习框架大量使用C++模板元编程(metaprogramming)技术。
——动手打造深度学习框架
C++模板元编程,打造深度学习框架
/// <summary>
/// 以类型传递
/// </summary>
/// <typeparam name="T"></typeparam>
template<typename T>
std::string get_type_ = typeid(T).name();
/// <summary>
/// 以类型传递
/// </summary>
/// <typeparam name="T"></typeparam>
template<typename T>
std::string get_type() { return typeid(T).name(); }
/// <summary>
/// 以 template<tpename T> 模板传递
/// </summary>
template<template<typename T1> typename T2>
std::string get_template_type_ = typeid(T2).name();
/// <summary>
/// 以 template<tpename T> 模板传递
/// </summary>
template<template<typename T1> typename T2>
std::string get_template_type() { return typeid(T2).name(); }
/// <summary>
/// 以 template<typename T1, typename T2> 模板传递
/// </summary>
template<template<typename T1, typename T2> typename T3>
std::string get_template_type2_ = typeid(T3).name();
int main()
{
std::cout << get_type_<int> << "\n";
std::cout << get_type<int>() << "\n";
std::cout << get_template_type_<std::list> << "\n";
std::cout << get_template_type<std::list>() << "\n";
std::cout << get_template_type2_<std::list> << "\n";
std::cout << get_template_type2_<std::pair> << "\n";
return 0;
}
运行结果: