templates, arrays, const, initialisierung

h^2

hat ne Keule +1
Ich würde gerne at Compile-Time ein statisches, konstantes int-array (besser noch numerischer Typ T) der Länge N mit Werten X erzeugen, aber ich kriegs nicht hin.

Also sowas:
Code:
template <typename T, unsigned int n, T X>
struct Foo
{
    static const T bar[n] = { X, X, ... X}; // eben n-mal X
}

(Ich weiß, dass array kann man da nicht initialisieren, nur zur Erklärung)

Also Foo<int, 4, -10>::bar, sollte [-10,-10,-10,-10] sein.

C++11 wäre in Ordnung, ich habe es bis jetzt aber auch mit std::array und aggregate initialization nicht hinbekommen...

Danke!
 
Wie wär's denn mit
Code:
static const int bar = {-10, -10, -10, -10};

Wie du siehst habe ich nicht wirklich verstanden was du willst. Geht es dir einfach darum das n-mal -10 schreiben einzusparen?
 
Ich habe halt Code, der erweiterbar bist, und manchmal vielleicht 10 mal das braucht, manchmal vielleicht 15 mal und ich erstens nicht so viel tippen will, und noch wichtiger, nicht Variablen für 1..100 anlegen, wenn nur 15, 19, und 23 gebraucht werden.
Ich habe aber jetzt was mit C++11 zeugs, das halbwegs geht. Poste ich gleich.
 
So gehts:
Code:
template <unsigned int n, typename TNum, TNum def>
struct ArrayIniter
{
    enum _enum { VAL = def };
    typedef std::array<TNum, n> Tarr;
    static const Tarr arr;
};

template <typename T>
inline
typename T::Tarr filledCopy()
{
    typename T::Tarr foo;
    foo.fill(T::VAL);
    return foo;
}

typedef ArrayIniter<6,long,-10> TExample;

template<>
const TExample::Tarr TExample::arr = filledCopy<TExample>();
Wobei da halt unnötig kopiert wird. Und am Ende habe ich halt ein std::array, statt einem stinknormalen array...
 
Wofür das gut ist, ist mir vollkommen schleierhaft. Wenn man einen Puffer hat, dessen Werte man 100% vorhersagen kann, braucht man den doch nicht mehr.
 
Wofür das gut ist, ist mir vollkommen schleierhaft. Wenn man einen Puffer hat, dessen Werte man 100% vorhersagen kann, braucht man den doch nicht mehr.

Es ging um Mengen von Parametern, die im Speicher liegen und Funktionen, die passende Sets davon raussuchen. Wir ein Set der Größe N angefragt und nicht gefunden, soll ein Error-Set zurückgegeben werden, was eben mit einem bestimmten Wert initialisiert ist.
Fehlerkontrollte habe ich jetzt anders implementiert, so dass das überflüssig ist, aber immerhin habe ich mich jetzt intensiver mit einigen C++11 Eigenheiten auseinandergesetzt!
 
Würde das set dann noch verändert? Ich denke es sollte auf keinen Fall const sein.
 
Back
Top