使用“auto”代替 std::vector<double>*
Posted
技术标签:
【中文标题】使用“auto”代替 std::vector<double>*【英文标题】:Use of "auto" in place of std::vector<double>* 【发布时间】:2014-07-28 06:18:35 【问题描述】:我正在使用类似
的功能void TestAnalyzer::AddBranch(std::vector<double>* vec, std::string name)
tree->Branch(name.c_str(),vec);
但有时我有 int 向量代替 vector<double>
,所以我如何使用“auto”或其他东西,以便使用相同的参数读取 int 和 double。
【问题讨论】:
提供重载或使用函数模板。 当然,你需要做一些类似于tree->Branch
的事情。而auto
和它关系不大。
【参考方案1】:
您正在寻找的是一个模板。您将为每种矢量获得一个新的、不同的函数。
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(或许多预标准编译器)。
【讨论】:
@ramkrishna:值得注意的是,您可能还想将tree->Branch
设为模板。另外,出于效率原因,名称几乎可以肯定已被const
引用接受。【参考方案2】:
听起来你想要一个模板化的函数。
template<typename T> void TestAnalyzer::AddBranch(std::vector<T>* vec, std::string name)
tree->Branch(name.c_str(),vec);
【讨论】:
以上是关于使用“auto”代替 std::vector<double>*的主要内容,如果未能解决你的问题,请参考以下文章
std::vector 与 std::list 与 std::slist 的相对性能?