繁体   English   中英

这是怎么回事! (模板<std::size_t size> )</std::size_t>

[英]How that works ! (template<std::size_t Size>)

#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);
}

大小如何传递给 function 模板而不像Print<5>(arr)那样定义它? (第 7 行“实际模板”,第 16 行“调用函数”)

大小如何传递给 function 模板而不像Print<5>(arr)那样定义它?

这要归功于模板参数推导 大小是从调用Print(arr)推导出来的。 Print()是一个 function 模板,具有std::size_t类型的非类型模板参数(即Size ):

template<std::size_t Size>
void Print(std::array<int, Size>&);

也就是说,模板参数Size被推导出为std::size_t类型的值,它对应于调用Print()时作为 function 参数传递的std::array的第二个模板参数。

这就是所谓的“模板参数推导”,它可以根据你传入的内容来计算它。

https://en.cppreference.com/w/cpp/language/template_argument_deduction

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM