🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
8 messages
8 total messages Started by Bernhard Ruch Wed, 10 Apr 1996 12:19
How initialize static member arrays?
#2068
Author: Bernhard Ruch
Date: Wed, 10 Apr 1996 12:19
19 lines
939 bytes
How can I initialize an array that is a static member
of a class?

e.g.

  class A {
    private:
      static int stat_int[20];
  };




Bernhard

      [ Articles to moderate: mailto:c++-submit@netlab.cs.rpi.edu ]
      [  Read the C++ FAQ: http://www.connobj.com/cpp/cppfaq.htm  ]
      [  Moderation policy: http://www.connobj.com/cpp/guide.htm  ]
      [      Comments? mailto:c++-request@netlab.cs.rpi.edu       ]
Re: How initialize static member arrays?
#2076
Author: Bernhard Ruch
Date: Thu, 11 Apr 1996 11:07
11 lines
778 bytes
Bernhard Ruch wrote:
> 
> How can I initialize an array that is a static member
> of a class?
...

Sorry, wenn ich einen englischen Artikel gepostet habe.
Eigentlich wollte ich ihn in comp.lang.c++ statt 
de.comp.lang.c++ posten.

Bernhard
Re: How initialize static member arrays?
#2100
Author: Karl-Heinz Krause
Date: Thu, 11 Apr 1996 17:46
23 lines
906 bytes
Am 10. Apr. 1996 schrieb Bernhard Ruch (Bernhard.Ruch@studi.epfl.ch):

> How can I initialize an array that is a static member
> of a class?

> e.g.

>   class A {
>     private:
>       static int stat_int[20];
>   };

Kein Problem:

    class A {
        static int stat_int[20];
    };

    int A::stat_int[] = { 1, 2, 3, 4 };



Karl-Heinz Krause
Re: How initialize static member arrays?
#2107
Author: Ulrich Moehrke
Date: Fri, 12 Apr 1996 09:50
21 lines
1126 bytes
In article <4kg90n$2c9@netlab.cs.rpi.edu>,
Bernhard Ruch  <Bernhard.Ruch@studi.epfl.ch> wrote:
>How can I initialize an array that is a static member
>of a class?

>  class A {
>    private:
>      static int stat_int[20];
>  };

zum Beispiel durch

int A::stat_int[20] = { 0, 1, 2, .... 19 };




      [ Articles to moderate: mailto:c++-submit@netlab.cs.rpi.edu ]
      [  Read the C++ FAQ: http://www.connobj.com/cpp/cppfaq.htm  ]
      [  Moderation policy: http://www.connobj.com/cpp/guide.htm  ]
      [      Comments? mailto:c++-request@netlab.cs.rpi.edu       ]
Re: How initialize static member arrays?
#2106
Author: J. Kanze
Date: Fri, 12 Apr 1996 12:10
26 lines
1424 bytes
In article <4kg90n$2c9@netlab.cs.rpi.edu> Bernhard Ruch
<Bernhard.Ruch@studi.epfl.ch> writes:

|> How can I initialize an array that is a static member
|> of a class?

|> e.g.

|>   class A {
|>     private:
|>       static int stat_int[20];
|>   };

In the definition, exactly like a global array:

    int         A::stat_int[ 20 ] = { 1 , 2 , ... } ;
-- 
James Kanze           (+33) 88 14 49 00          email: kanze@gabi-soft.fr
GABI Software, Sarl., 8 rue des Francs Bourgeois, 67000 Strasbourg, France
Conseils en informatique industrielle --
                            -- Beratung in industrieller Datenverarbeitung

      [ Articles to moderate: mailto:c++-submit@netlab.cs.rpi.edu ]
      [  Read the C++ FAQ: http://www.connobj.com/cpp/cppfaq.htm  ]
      [  Moderation policy: http://www.connobj.com/cpp/guide.htm  ]
      [      Comments? mailto:c++-request@netlab.cs.rpi.edu       ]
Re: How initialize static member arrays?
#2121
Author: Bernhard Ruch
Date: Mon, 15 Apr 1996 08:14
41 lines
1111 bytes
Karl-Heinz Krause wrote:
> > How can I initialize an array that is a static member
> > of a class?
> 
> > e.g.
> 
> >   class A {
> >     private:
> >       static int stat_int[20];
> >   };
> 
> Kein Problem:
> 
>     class A {
>         static int stat_int[20];
>     };
> 
>     int A::stat_int[] = { 1, 2, 3, 4 };
> 
> Karl-Heinz Krause

Ok, dies geht sehr gut fuer ein Array der Groesse 20,
aber was macht man, wenn man ein Array der Groesse 50000
initialisieren muss?


Bernhard













EPFL-Info 97
Re: How initialize static member arrays?
#2127
Author: Dietmar Kuehl
Date: Mon, 15 Apr 1996 15:22
111 lines
3511 bytes
Hi,

Bernhard Ruch (Bernhard.Ruch@studi.epfl.ch) wrote:
: Karl-Heinz Krause wrote:
: > > How can I initialize an array that is a static member
: > > of a class?
: > 
: > > e.g.
: > 
: > >   class A {
: > >     private:
: > >       static int stat_int[20];
: > >   };
: > 
: > Kein Problem:
: > 
: >     class A {
: >         static int stat_int[20];
: >     };
: > 
: >     int A::stat_int[] = { 1, 2, 3, 4 };
: > 
: > Karl-Heinz Krause

: Ok, dies geht sehr gut fuer ein Array der Groesse 20,
: aber was macht man, wenn man ein Array der Groesse 50000
: initialisieren muss?

Das haengt ein wenig davon ab, wie es initialisiert werden soll: Wenn
alle Werte gleich sein sollen, dann deklariert man das Array einfach
ein wenig anders und es gibt kein Problem mehr:

  #include <vector>
  class A {
    static vector<int> stat_int;
  };

  extern int init_size;
  extern int init_val;
  vector<int> A::stat_int(init_size, init_val);

Natuerlich koennen 'init_size' und 'init_val' auch Literale sein.

Wenn man das Array mit verschiedenen Werten initialisieren will, dann
muss man sich etwas ausdenken, wie man diese Werte bestimmen kann und
kann eine Hilfsklasse verwenden:


  #include <vector>

  template <class T>
  class vector_init
  {
  public:
    vector_init(vector<T> &vec, T (*init_val)(int))
    {
      int idx = 0;
      for (vector<T>::iterator it = vec.begin(); it != vec.end(); ++it)
	*it = init_val(idx++);
    }
  };

  class A
  {
    static vector<int> stat_int;
    static vector_init<int> stat_int_init;
  };

  int init(int idx) { return idx; }

  extern int init_size;

  vector<int>      A::stat_int(init_size);
  vector_init<int> A::stat_int_init(A::stat_int, init);

Uebrigens sollte man sich darueber klar sein, dass wenn man nicht ein
built-in Array mit einer Initializer-Liste initialisiert, die
Reihenfolge der Initialsierung nicht feststeht.  Ggf. ist es dann
besser, anstatt statischen Daten eine Funktion zu verwenden, die die
statischen Daten einkapselt und initialisiert:

  #include <vector>
  class A
  {
    static vector<int> &stat_int();
  };

  int init(int idx) { return idx; }

  // Deklaration von 'vector_init' wie oben

  extern int init_size;

  vector<int> &A::stat_int()
  {
    static vector<int>      stat(init_size);
    static vector_init<int> stat_init(stat, init);

    return stat;
  }

Dadurch wird sichergestellt, dass die statischen Daten auf jeden Fall
konstruiert sind, wenn darauf zugegriffen wird. Das ist sonst nicht so
leicht zu garantieren. Allerdings wird mit dieser Technik nicht
garantiert, dass die Daten ueberhaupt irgendwann konstruiert werden:
Wenn nicht auf 'stat_int()' zugegriffen wird, wird der Vektor auch
nicht konstruiert.
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl/
I am a realistic optimist - that's why I appear to be slightly pessimistic
Re: How initialize static member arrays?
#2148
Author: Nepomuck
Date: Tue, 16 Apr 1996 18:33
58 lines
1554 bytes
Bernhard Ruch (Bernhard.Ruch@studi.epfl.ch) wrote:
: Karl-Heinz Krause wrote:
: > > How can I initialize an array that is a static member
: > > of a class?
: > 
: > > e.g.
: > 
: > >   class A {
: > >     private:
: > >       static int stat_int[20];
: > >   };
: > 
: > Kein Problem:
: > 
: >     class A {
: >         static int stat_int[20];
: >     };
: > 
: >     int A::stat_int[] = { 1, 2, 3, 4 };
: > 
: > Karl-Heinz Krause

: Ok, dies geht sehr gut fuer ein Array der Groesse 20,
: aber was macht man, wenn man ein Array der Groesse 50000
: initialisieren muss?

Warum nimmst Du nicht eine static member function:

class A {
  private:
    static int stat_int[20];
  public:
    static void init_stat_int();
}

In der Implementation von "init_stat_int" schreibst Du Deine Initialisierungs-
code, und mit

A::init_stat_int();

rufst Du die Funktion auf (ohne, dass Du eine Instanz der Klasse A bilden
musst).

- Michael -













: EPFL-Info 97
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads