首页 > 解决方案 > 如何通过参数的某些质量而不是其确切类型来指定参数类型?

问题描述

所以我在 C++ 中有一个函数如下:

void print_vec(std::vector<int> v) {
  for (int i: v) {
    std::cout << i << ' ';
  }
  std::cout << std::endl;
}

哪个有效,但仅适用于 int 向量。我想要类似的东西

void print_iter(Iterable<CanDoCout> iterable) {
  for (auto i: iterable) {
    std::cout << i << ' ';
  }
  std::cout << std::endl;
}

我该如何实施print_iter?或者我怎样才能找到如何实现这样的通用功能?

标签: c++typing

解决方案


您正在寻找的是模板

template <class T>
void print_iter(const T& iterable) {
  for (const auto& i: iterable) {
    std::cout << i << ' ';
  }
  std::cout << std::endl;
}

您可以更进一步,使用概念SFINAE将您的模板限制为仅接受您应用的操作的类型。


推荐阅读