带有非类型参数的调用模板函数明确和类型参数隐式

Call template function with non-type parameters explicit and type parameters implicit

本文关键字:类型参数 函数 调用      更新时间:2023-10-16

我想创建一个具有两个类型模板参数的模板函数,可以从传递给该函数的参数和非类型模板参数中推导,这些参数将被明确放置。似乎编译器可以推断每种类型的内容,但是如果我指定了想要所有模板参数的非类型模板参数。我可以仅指定非类型模板参数,还是全部或全无?

#include <iostream>
#include <typeinfo>
template <typename T, bool bPrint=true>
void f(T var) {
  if (bPrint)
    std::cout <<  typeid(var).name() << std::endl;
}
int main() {
  f(3); //works
  f<false>(3); //error: template argument deduction/substitution failed
}

您可以,但是推论的模板参数需要在参数列表的末尾。您可以通过重新排序函数模板的参数来编译代码:

template < bool bPrint=true, typename T>
void f(T var) {
  if (bPrint)
    std::cout <<  typeid(var).name() << std::endl;
}

demo