C++ template Day Day Up 第三天 模板函数的重载

转载 2007年09月27日 08:19:00
从C++ templates粘一段例子下来:
// maximum of two int values
inline int const& max (int const& a, int const& b)
{
    return a<b?b:a;
}
 
// maximum of two values of any type
template <typename T>
inline T const& max (T const& a, T const& b)
{
    return a<b?b:a;
}
 
// maximum of three values of any type
template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
    return max (max(a,b), c);
}
 
int main()
{
    ::max(7, 42, 68);     // calls the template for three arguments
    ::max(7.0, 42.0);     // calls max<double> (by argument deduction)
    ::max('a', 'b');      // calls max<char> (by argument deduction)
    ::max(7, 42);         // calls the nontemplate for two ints
    ::max<>(7, 42);       // calls max<int> (by argument deduction)
    ::max<double>(7, 42); // calls max<double> (no argument deduction)
    ::max('a', 42.7);     // calls the nontemplate for two ints
}
 
恩,这个例子浅显易懂,可以根据它看出来编译器的推断规则。
 
重要的是看下面这个例子:
template<typename T>
void fun(T* t)
{
     cout<<"fun with pointer/n";
}
 
template<typename T>
void fun(T t)
{
     cout<<"fun normal/n";
}
 
// main
int i = 5;
fun(&i); //[a]
fun(i); //[b]
 
[a]和[b]分别输出:
fun with pointer
fun normal
 
这说明可以根据模板参数来区分参数的类型,这也依赖于deduction。
例如可以通过下面的代码来检验一个类型是否为指针。
template<typename T>
struct IsPointer
{
     enum{ Result = false };
};
 
template <typename T>
struct IsPointer<T*>
{
     enum{ Result = true };
};
这是编译期便能够算出结果的。
 

相关文章推荐

C++ - 函数模板(function template) 的 重载(overload) 详解 及 代码

函数模板(function template) 的 重载(overload) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy 函数模板(fu...

C++day16-函数指针-模版

  • 2015-10-28 23:35
  • 10.82MB
  • 下载

Lesson_for_java_day08--面向对象、重载和构造函数、this关键字的使用以及八大类在全局变量初始化中的值

一、面向对象的思想、重载和构造函数、th

《从零开始学Swift》学习笔记(Day 39)——构造函数重载

原创文章,欢迎转载。转载请注明:关东升的博客  构造函数作为一种特殊方法,也可以重载。Swift中构造函数可以多个,他们参数列表和返回值可以不同,这些构造函数构成重载。示例代码如下:class Rec...

day_02_布尔、函数重载、内存分配、引用

六C布尔类型 七操作符别名了解 八C的函数重点 1函数重载 2函数的缺省参数默认实参 3函数的哑元参数了解 4内联函数inline 九C的动态内存分配 1回顾C语言中动态内存分配 2C使用newdel...

《从零开始学Swift》学习笔记(Day 39)——构造函数重载

构造函数作为一种特殊方法,也可以重载。 Swift中构造函数可以多个,他们参数列表和返回值可以不同,这些构造函数构成重载。 示例代码如下: class Rectangle {        ...

Day05C++运算符重载

 运算符重载基本概念(这是我学的最蛋疼的一天,就学了一个operator关键字)  运算符重载(operator overloading)只是一种”语法上的方便”,也就是它只是另一种函...

【重温C/C++】explicit+||template||virtual虚函数||重载和重写

explicit   只对构造函数起作用,用来抑制隐式转换。如:      class   A   {              A(int   a); &...

boost准模板库date迭代器(指针)使用以及常用的两个静态成员函数is_leap_year()和end_of_month_day()

//日期迭代器使用 #define BOOST_DATE_TIME_SOURCE #include #include #include #include #include #...

编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异

编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异 题目挺绕口的。C++ 11的好东西不算太多,但变参模板(Variadic Template)肯定是其中耀...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)