help-gplusplus
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: C++ Classes with Variable Length Array Members


From: Robert Heller
Subject: Re: C++ Classes with Variable Length Array Members
Date: Thu, 15 Oct 2009 09:30:17 -0500

At Thu, 15 Oct 2009 06:09:40 -0700 (PDT) =?ISO-8859-1?Q?Nordl=F6w?= 
<per.nordlow@gmail.com> wrote:

> 
> GCC's C Extensions gives us zero and variable length arrays.
> 
> Is it possible to get variable length arrays as members ("by-value")
> in C++ classes aswell, something like:
> 
> class string255
> {
> private:
>   char size;
>   char val[size];
> }:
> 
> I guess it all boils downto how C++ allocates a class.
> 
> Can we give gcc hints about this somehow?

That is one of the things that what constructors and static members are
for.

You can't define a member array with another member as the size, but you
can do this:

class string255
{
private:
   char size;
   char *val;
   char dummy;
public:
   string255(int _size) {
        assert(_size > 0 && _size < 256);
        val = new char[_size];
        size = _size;
   }
   ~string255() {
        if (val != null) delete val[];
   }
   char& operator [] (i) {
        if (i >= 0 && i < size) return val[i];
        else return dummy;
   }
};

This pretty much implements what you want I believe.  i suspect you will
want to add a copy constructor and an assignment operator method, but I
will leave them as a homework assignment :-).  If you want something
'more automagical' there is the STL or maybe you want to use a dufferent
OO language altogether (Tcl+SNIT maybe).

> 
> /Nordl=F6w
>                                                                               
>                                        

-- 
Robert Heller             -- 978-544-6933
Deepwoods Software        -- Download the Model Railroad System
http://www.deepsoft.com/  -- Binaries for Linux and MS-Windows
heller@deepsoft.com       -- http://www.deepsoft.com/ModelRailroadSystem/
                       


reply via email to

[Prev in Thread] Current Thread [Next in Thread]