【问题标题】:How that works ! (template<std::size_t Size>)那是怎么回事! (模板<std::size_t 大小>)
【发布时间】:2020-11-29 07:14:01
【问题描述】:
#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&lt;5&gt;(arr) 那样定义的情况下传递给函数模板? (第 7 行“实际模板”,第 16 行“调用函数”)

【问题讨论】:

    标签: c++ arrays function templates


    【解决方案1】:

    大小如何在没有像Print&lt;5&gt;(arr) 那样定义的情况下传递给函数模板?

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

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

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

    【讨论】:

    • 谢谢 :) !
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2011-08-25
      • 2014-11-09
      • 2011-07-21
      • 1970-01-01
      相关资源
      最近更新 更多