我想创建一个模板函数,它既有类型模板参数,可以从传递给函数的参数中推导出来,也有非类型模板参数,它们将被显式放置。编译器似乎可以推断出每种类型是什么,但如果我指定非类型模板参数,它需要所有模板参数。我可以只指定非类型模板参数,还是全有或全无?
#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;
}
关于c++ - 使用显式非类型参数和隐式类型参数调用模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40874065/