代码之家  ›  专栏  ›  技术社区  ›  WhatABeautifulWorld

具有默认值的模板函数

  •  3
  • WhatABeautifulWorld  · 技术社区  · 7 年前

    我有一个模板功能:

    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>()
    

    有什么方法可以避免吗?如果缺少输入类型,我可以让编译器使用vector吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Oliv    7 年前

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

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