#include <iostream>
#include <array>
#define print(x) std::cout << x
#define println(x) std::cout << x << std::endl
template<std::size_t Size>
void Print(std::array<int, Size>& arr) {
for (int i = 0; i < Size; i++) {
println(arr[i]);
}
}
int main() {
std::array<int, 5> arr = {1, 2, 3, 4, 5};
Print(arr);
}
如何在没有像 Print<5>(arr)
这样定义的情况下将大小传递给函数模板? (第 7 行“实际模板”,第 16 行“调用函数”)
最佳答案
How does the size got passed to the function template without defining it like
Print<5>(arr)
?
这要归功于模板参数推导。大小是从调用 Print(arr)
中推导出来的。 Print()
是一个函数模板,具有类型为 Size
的非类型模板参数(即 std::size_t
) :
template<std::size_t Size>
void Print(std::array<int, Size>&);
即模板参数Size
被推导为 std::size_t
类型的值,它对应于 std::array
的第二个模板参数调用 Print()
时作为函数参数传递.
关于c++ - 怎么样! (模板<std::size_t 大小>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63327379/