默认参数

1. 常规默认参数

类型模板参数可以有默认值。但指定默认值有一个规矩:如果某个模板参数有默认值,那么从这个默认值的模板参数开始,后面的模板参数都得有默认值。

template<typename T = char, typename U = int>
struct TC {
    ...
};

int main() {
    TC<> mytc1; // 都使用默认参数,则<>中什么也不用提供
    TC<double> mytc2; // <>中第一个类型不使用默认参数,第二个类型使用默认参数
}

当然,类模板的偏特化版本中的类型模板参数不可以有默认值。

template<typename T = char>
struct TC<T, int> {
    ...
};    

2. 后面的模板参数依赖前面的模板参数

template<typename T, typename U = T*>
struct TC {
    ...
};

3. 在模板声明中指定默认参数

// 声明1:指定了V和W
template<typename T, typename U, typename V = int, typename W = char>
struct TC;

// 声明2:指定了U
template<typename T, typename U = char, typename V, typename W>
struct TC;

// 在定义时就不要指定默认参数了
template<typename T, typename U, typename V, typename W>
struct TC {
    //...
};

int main() {
    TC<int> mytc; // 第2,3,4个模板参数都采用默认值,所以<>中只提供了一个类型模板实参
}

 

posted @   小熊酱  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示