栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

template关键字

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

template关键字

概念:用于泛型编程,当某个算法或者数据结构与数据无关,其中的元素可以是任意一种类型时,可以使用泛型来解决代码重复定义的问题,使用template关键字定义模板函数或者模板类的数据类型,在编译时,编译器会用具体的数据类型来替换占位符。

注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行。

定义:

template <类型名 占位符>
//不确定参数个数的模板定义  
template <类型名... 占位符 >

类型名可以通过typeid(类型名)获取类型ID来判断参数是否为某种类型如:
if(typeif(类型名) == typeid(uint_32)) 来判断类型是不是uint_32类型

模板类
格式:

template <[class | typename] 形参名称, [class | typename]  形参名称, ....>  
class 类名
{
    <函数体>
}

实例:

template
class DemoClass{
public:
    T t;
    D d;
    void addBySelf(){
        ALOGE(" define string is %s ", typeid(uint8_t).name());
        ALOGE(" define string is %s ", typeid(D).name());
        ALOGE(" define typename is %s ", typeid(T).name());

        if(typeid(D).name() == typeid(std::string).name()){
            std::string val = static_cast(d);
            ALOGE(" D VALUE IS %s", val.c_str());
        }

        if(typeid(uint8_t).name() == typeid(T).name()){
            ALOGE("==========> TRUE");
        }
    }
};

模板函数

template
A add(A a, A b){
    return a + b;
}

模板可变参数

template
void getArgs(const F& f, Arg&&... args) {
    std::initializer_list({(f(std::forward(args)), 0)...});
}
getArgs([](int i){ALOGE("%d", i);}, 1, 2,3,4,5);
//输出: 1,2,3,4,5
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1036655.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号