geek-branch

書き置きです。

テンプレート関数で配列を受け取る

テンプレート関数に配列を渡したいなーとたまに考えることがあった。
しかし、T[]で受け取ることはできないし、T*で受け取ってもサイズの情報を引数だけで持たせることはできないしなあ、と考えていたけれど、以下のコードで可能だった。

#include <iostream>

template<typename T, std::size_t N>
std::size_t array_size(T (&)[N]) {
    return N;
}

template <typename T>
void cout_array(T& param) {
    for (std::size_t i = 0; i < array_size(param); ++i) {
        std::cout << param[i] << std::endl;
    }
}

int main() {
    int arr[5] = {5, 4, 3, 2, 1};
    cout_array(arr);
}

参照で受け取り、配列のサイズを返す関数を用意することで問題なく配列を渡した処理ができる。
Effective Modern C++を読み直しているのだけれど、やはり技術書は知識が乏しい段階で読むのと多少知識が備わった段階で読むのとでは理解のレベルが変わってくると思う。
時間を見つけて購入したC++の書籍を全部読み直したい気持ちがある。