zoukankan      html  css  js  c++  java
  • [导入]模板中的一些规则

    1. 模板定义内的自定义类型成员调用方法(用typename显示说明):类可以定义类型成员,如size_type, size_t等类型。在定义模板类时如何调用它呢?为了说明是类型,显示用typename说明。

    template<class cl, class T>

    cl func(cl* cl_p, T value)

    {

           //cl::size_type * value; // If cl::size_type is a type, then a declaration

                            // If cl::size_type is an object, then a multiplication

    typename cl::size_type *value;

    }                           

    2. 非类型模板形参的使用: 模板非类型形参是模板定义内部的常量值.(在需要常量表达式的时候,可以用非类型形参,如定义数组的长度)。

    因为非类型模板形参需要传递的是常量表达式,所以不支持一般的隐式类型转换。

    template<class T, size_t N> void fcn(T (&cl)[N]) {...}

    int x[20];

    fcn(x);

    3. 模板何时实例化?函数声明,定义对象的引用和指向对象的指针都不会实例化。定义类对象或调用函数时实例化。

    4.friend模板声明依赖性:(1) 当授予对给定模板所有实例的访问权时,在作用域中不需要存在该类模板或函数模板的声明。编译器将友元声明也当作类或函数的声明对待;(2)想要限制对特定实例化的友元关系时,必须在可以用于友元声明之前声明类或函数。

    5.对于不同参数的函数模板用相同参数可以调用么?可以,会调用隐式转换。

    #include<iostream>

    using namespace std;

    template<typename T1, typename T2>

    void print(const T1 &v1, const T2 &v2)  //参数类型不同
    {
        cout << "T1 = " << v1 <<endl;
        cout << "T2 = " << v2 <<endl;
    }

    int main()
    {
        print(1,2);
    //ok

        int a=1;
        int b=2;
        print(a,b);
    //ok,形参类型相同

        return 0;
    }

    文章来源:http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!266.entry



    幸运草 2009-03-25 14:56 发表评论
  • 相关阅读:
    算法53----换钱的最小次数和方法数【动态规划】
    算法52-----矩阵最小路径【动态规划】
    Data
    Git
    Git
    Git
    Git
    DevOps
    Docker
    Tools
  • 原文地址:https://www.cnblogs.com/liyuxia713/p/2540801.html
Copyright © 2011-2022 走看看