c++ - 怎么样! (模板<std::size_t 大小>)

标签 c++ arrays function templates

#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/

相关文章:

php - 确定变量的数量并自动使用正确数量的变量进行bind_param

function - Golang 函数测试

c++ - CUDA: block 的更多维度还是只有一个?

c++ - Bad_alloc 声明数组时,似乎内存不够

c++ - 在几个可变的 lambda 中更改同一个 vector

javascript - 在 Javascript 中使用函数表达式而不是函数语句有什么意义?

c - 将结构数组传递给函数

c++ - 不同形式的初始化

arrays - 使用唯一 id 列减去 2 维数组

C# 在提供的索引点内搜索数组