【问题标题】:Is there a way to pass a vector of unknown type as a function parameter?有没有办法将未知类型的向量作为函数参数传递?
【发布时间】:2021-03-23 23:09:39
【问题描述】:

我想要一个函数,任何类型的向量作为我的函数参数

void vectorFunction(vector <int> vec){
     doSomething;
}

但是,我需要这个函数来处理任何类型的向量;

vector<int>
vector<double>

还有更复杂的类型,比如

vector <pair <int, int>>

我应该为函数提供什么数据类型以允许我传递任何向量?

【问题讨论】:

  • template &lt;typename T&gt; void vectorFunction(vector&lt;T&gt; vec) {}
  • 也许你需要一个函数模板。
  • 如果您希望 doSomething 适用于(广泛的)各种类型,请务必在此处思考您的 doSomething 可以是什么。

标签: c++ function vector c++17


【解决方案1】:

您需要使用 C++ 中的模板完成的泛型编程。 std::vector 本身就是一个模板。

在模板函数前面加上template&lt;typename T&gt;T 是未知类型的占位符。

正如 Igor Tandetnik 在评论中所写,以下是您示例的语法:

template <typename T>
void vectorFunction(vector<T> vec) {
    // do something
}

请注意,您在函数中引用了vector&lt;T&gt;。编译器将为所需的每种类型实例化这些模板。

如果您想了解更多,请查看https://www.cplusplus.com/doc/oldtutorial/templates/

【讨论】:

  • 请注意,术语模板元编程 通常不用于一般模板。它用于将类型转换为类型 (std::remove_reference)、类型转换为值 (std::is_copy_constructible) 等的元函数。
  • 抱歉含糊不清。我只是直译了用于指代模板的德语术语“Metaprogrammierung”。我用通用替换它
猜你喜欢
  • 2019-06-03
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
相关资源
最近更新 更多