Folgendes hab ich vor:
Code: Alles auswählen
template <typename T, size_t N>
class some_array
{
public:
some_array(std::initializer_list<T> il)
{
for (auto iter(il.begin()), size_t i=0; i<N && iter != il.end(); ++i, ++iter)
{
arr[i] = *iter;
}
private:
T arr[N];
}
};
int main(int argc, char **argv)
{
// das geht nicht, wäre aber schön
some_array arr{1, 2, 3, 4, 5};
}
Weil die Anzahl der Elemente der initializer_list wäre in dem Fall ja zur Compilezeit mit 5 bekannt. Außerdem hat eine initializer_list, die ich in den geschweiften Klammern angebe, doch eigentlich immer eine definierte Anzahl an Elementen, oder irre ich mich da? Wäre es nicht irgendwie zweckmäßig, dass die std::initializer_list auch ein zweites Template-Argument für die Anzahl der Elemente hätte? Also so wie some_array in dem Beispiel auch? Dann könnte der Code sogar funktionieren, wenn man den Ctor entsprechend anpasst:
Code: Alles auswählen
template <typename T, size_t N>
class some_array
{
public:
some_array(std::initializer_list<T, N> il)
{
for (auto iter(il.begin()), size_t i=0; i<N && iter != il.end(); ++i, ++iter)
{
arr[i] = *iter;
}
private:
T arr[N];
}
};
int main(int argc, char **argv)
{
// würde es jetzt gehen?
some_array arr{1, 2, 3, 4, 5};
}
Code: Alles auswählen
int arr[] = {1, 2, 3, 4, 5};