サイズ、タイプ、または寸法に関係なく、行列の文字列への変換を実現したいと考えています。テンプレートを使用して、私は必要な行列の「ソート」ごとに1つのテンプレートを定義することで、テンプレートを使用できるようにしました。アレイ用テンプレートを使用して異なる次元の行列を扱う方法は?
テンプレート:2-dimensionnal行列の
template < typename NUM, std::size_t SIZE >
std::string to_string(const std::array< NUM, SIZE > &arr) {
std::string buf;
for (uint32_t i = 0; i < SIZE; i++)
buf += std::to_string(arr[i]) + " ";
return buf;
}
は、テンプレート:
template < typename NUM, std::size_t INNER_SIZE, std::size_t OUTER_SIZE >
std::string to_string(const std::array< std::array<NUM, INNER_SIZE>, OUTER_SIZE > &arr) {
std::string buf;
for (uint32_t i = 0; i < OUTER_SIZE; i++) {
for (uint32_t j = 0; j < INNER_SIZE; j++)
buf += std::to_string(arr[i][j]) + " ";
}
return buf;
}
しかし、私は唯一の汎用テンプレートを持っていることによって、解決策は、より 'エレガント' したいのですがそれらの次元に関係なく行列を扱うことができる。それを行う方法はありますか?
動的なサイズのベクトルか何かを使用しないのはなぜですか? – xander
counterpoint:あなたのマトリックスは実際にその寸法にテンプレート化される必要がありますか?私はマトリックスクラスを実装していましたが、それをテンプレート化することから始めましたが、すぐにそれをやめ、ディメンションを正規のメンバにすることが容易であることを発見しました。そうするために)。それは、テンプレートは単に "generic" _の特定の定義の汎用性を助長するだけなので、テンプレートを使用するよりも汎用*です。 –
私は他のコメントに同意しますが、今のところ、2番目のスニペットの内部ループを 'to_string(arr [i]) 'の呼び出しで置き換えることができます。 –