ここでの多くは、どこから始めているか (C++03 と C++11) と、実際にどこに行きたいか (数値だけを渡すか、または何かを渡すかどうか) によって異なりますstd::array
。
C++11 を使用していて、単に数値を渡したい場合は、おそらく次のようにするのが最も簡単です。
#include <vector>
#include <iostream>
#include <initializer_list>
class pixel {
std::vector<double> color;
public:
pixel(std::initializer_list<double> && l) : color(l) {}
~pixel() {
// show the data we received:
for (double const &f : color)
std::cout << f << "\t";
}
};
int main() {
pixel{1.9, 2.8, 3.7, 4.6, 5.5};
}
std::initializer_list
は縮小変換をサポートしていないことに注意してください。そのため、数値を のfloat
代わりにとして保存する場合は、実際にsdouble
を渡す必要があります。float
pixel{1.9f, 2.8f, 3.7f, 4.6f, 5.5f};
ただし、@Chris のソリューションとは異なり、これは指定された数の引数を渡すことを強制しようとはしません。渡した数を格納することに準拠するだけです。その代わり、少し使いやすくなっています。サイズを指定する必要はありません。渡されたアイテムの数から計算されます。
その一般的な考え方が気に入っているが、配列と C++03 に固執する (なぜ?) 場合は、次のようにすることができます。
#include <vector>
#include <iostream>
#include <algorithm>
template<class T, size_t N>
class pixel {
T color[N];
public:
pixel(T(&matrix)[N]) {
std::copy_n(matrix, N, color);
}
};
template <class T, size_t N>
pixel<T, N> make_pixel(T(&matrix)[N]) {
return pixel<T, N>(matrix);
}
int main() {
float a [] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
pixel<float, 5> p = make_pixel(a);
return 0;
}
この場合、float
テンプレート パラメーターとして渡しましたが、float
常に.float
T