使用“auto”代替std :: vector <double> * </double>

时间:2014-07-28 06:18:35

标签: c++

我正在使用像

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

但是代替vector<double>有时我也有int向量,所以如何使用“auto”或其他东西,以便使用相同的参数读取int和double。

2 个答案:

答案 0 :(得分:4)

您正在寻找的是一个模板。您将为每种矢量获得一个新的不同功能。

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(或许多预标准编译器)。

答案 1 :(得分:2)

听起来你想要一个模板化的功能。

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