首页 > 解决方案 > 具有默认值的模板函数

问题描述

我有一个模板功能:

template <typename T>
void foo(const T& container = {}) {
  // ... some implementation
}

现在我可以打电话了

foo<std::vector>(some_vector_param) or foo<std::map>(some_map_param)

由于我有容器的默认值,我应该能够在没有任何参数的情况下调用。

foo()

但此时,编译器不知道如何翻译它,因为它可能是矢量或地图。一种解决方案是显式指定类型。

foo<vector>()

我有办法避免这种情况吗?如果缺少输入类型,我可以让编译器使用向量吗?

标签: c++templates

解决方案


模板参数也可以有默认参数:

template <typename T = vector<int>>
void foo(const T& container = {}) {
  // ... some implementation
  }

推荐阅读