【问题标题】:Use of "auto" in place of std::vector<double>*使用“auto”代替 std::vector<double>*
【发布时间】:2023-03-25 15:35:01
【问题描述】:

我正在使用类似

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

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

【问题讨论】:

  • 提供重载或使用函数模板。
  • 当然,你需要做一些类似于tree-&gt;Branch 的事情。而auto 和它关系不大。

标签: c++


【解决方案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-&gt;Branch 设为模板。另外,出于效率原因,名称几乎可以肯定已被const 引用接受。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-26
    • 2017-12-27
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    相关资源
    最近更新 更多