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

函数中推导参数之前的默认模板参数?

  •  6
  • Vincent  · 技术社区  · 13 年前

    以下编译在g++中没有问题:

    template<typename ReturnType = double, typename OtherType> ReturnType func(const OtherType& var)
    {
        ReturnType result = 0;
        /* SOMETHING */
        return result;
    }
    

    所有符合标准的编译器都可以使用非默认的模板参数吗( OtherType 此处)在默认模板参数之后( ReturnType 这里)?

    1 回复  |  直到 13 年前
        1
  •  10
  •   Lily Ballard    13 年前

    这很复杂。根据C++11规范:

    如果类模板的模板参数具有默认模板参数,则每个后续模板参数都应提供默认模板参数或是模板参数包。如果一个主类模板的模板参数是一个模板参数包,那么它应该是最后一个模板-参数。[注意:这些不是函数模板或类模板部分专业化的要求,因为可以推导模板参数(14.8.2)。

    因此,除非是部分专业化,否则类不允许您尝试执行的操作。但对于函数来说,这是可以的。

    所以,只要你只在你的例子中展示的函数上做这个技巧,那没关系。你只是不能把它推广到类模板上。