繁体   English   中英

模板别名可以用作 function 输入类型吗?

[英]Can template alias be used as a function input type?

我想知道是否可以将模板别名作为 function 输入类型,并且可以根据输入进一步确定“进一步”类型?

template<typename T>
using Vec = std::vector<T>;

我想定义一个 function:

void func(Vec& a){
  for(auto &each :a){
    //Do something
  }
}

其中Vec的类型可以根据输入a导出。

在这样的示例中,可以将相同的func应用于所有a作为std::vector<ANY TYPE>

我有这样一个问题,因为我一开始就初始化了一个vec并运行了一系列函数。

a = Vec<int>;
fun1(a);
fun2(a);
...
funN(a);

我想有相同的操作,但有不同的类型。

a = Vec<double>;
fun1(a);
fun2(a);
...
funN(a);

如果我遵循旧模板 function 它将是

a = Vec<int>;
fun1<int>(a);
fun2<int>(a);
...
funN<int>(a);

并改变为double我必须做

a = Vec<double>;
fun1<double>(a);
fun2<double>(a);
...
funN<double>(a);

基本上,我必须将每个 function 的int更改为double 我期待一些更简单的方法来做到这一点。

感谢模板参数推导,模板已经按照您想要的方式运行。

定义func

template<typename T>
void func(Vec<T>& a) {
    // ...
}

会让你写

Vec<int> a{};
func(a);

Vec<double> b{};
func(b);

调用站点不需要显式类型参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM