使用 "auto" 代替 std::vector<double>*

Use of "auto" in place of std::vector<double>*

本文关键字:gt lt double vector auto 代替 std 使用      更新时间:2023-10-16

我使用的函数是

void TestAnalyzer::AddBranch(std::vector<double>* vec, std::string name){
tree->Branch(name.c_str(),vec);
}

但是在vector<double>的位置,有时我也有int向量,所以我如何使用"auto"或其他东西,以便在相同的参数下读取int和double

你要找的是一个模板。对于每一种向量,你将得到一个新的、不同的函数。

template< typename element_type >
void TestAnalyzer::AddBranch(std::vector<element_type>* vec, std::string name){
tree->Branch(name.c_str(),vec);
}

element_type将从函数实参中推导出来,就像auto是从初始化式中推导出来一样。这种用法更原始,适用于c++ 98(或许多预标准编译器)。

听起来你想要一个模板化的函数。

template<typename T> void TestAnalyzer::AddBranch(std::vector<T>* vec, std::string name){
   tree->Branch(name.c_str(),vec);
}