【发布时间】:2018-03-26 20:01:26
【问题描述】:
我知道,给定一个特定的函数参数,函数模板有自动类型推导的可能性,但是非类型模板参数也存在这种方法吗?
例子:
#include <iostream>
template<typename T, T val>
void func_a(void) {
std::cout << val << std::endl;
}
template<typename T>
void func_b(T val) {
std::cout << val << std::endl;
}
int main(void) {
func_a<uint32_t, 42u>();
//func_a<42u>(); //This line doesn't work
func_b(42u);
return 0;
}
所以当我调用func_a() 时,我不想每次都给出模板参数类型uint32_t。 C++17及以下有没有这样的方法?
我正在使用 g++ v.7.3 和 c++17。
【问题讨论】:
-
首先,你必须让我相信 func_a 比 func_b 提供了一些东西,因为它应该被内联?
-
@GemTaylor - 也许
func_a()可以强加val是constexpr值。 -
@max66 也许,但对于任何给定的输入,func_b 也可以。示例: // constexpr 函数使用递归而不是迭代 constexpr int factorial(int n) { return n
标签: c++ c++11 templates c++17 template-argument-deduction