簡體   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