array initialization in initialization list.

Discussion in 'C++' started by toton, Sep 28, 2006.

  1. toton

    toton Guest

    Hi,
    I can initialize an array of class with a specific class as,
    class Test{
    public:
    Test(int){}
    };
    Test x[2] = {Test(3),Test(6)}; using array initialization list. (Note
    Test do NOT have a default ctor).
    Is it possible to do so in the class parameter initialization using
    specific ctor?
    like
    class TestContainer{
    private:
    Test _x;
    public:
    TestContainer(int size) : _x(Test(size) {}
    };
    This works.
    class TestContainer{
    private:
    Test _x[2];
    public:
    TestContainer(int size) : ??? {} //how to do it like array
    initialization?
    };
    In actual case Test class is a specific kind of semi-fixed-size
    container (not defined in STL! ) which needs a size parameter. The
    class like TestContainer holds such Test class two instance (and only
    two). I know that an alternative is to store Test _x1, Test _x2; and in
    initialization list TestContainer(int size) : _x1(Test(size) ,
    _x2(Test(size)){} , or in general case, using an STL vector with
    reserve space 2. Or storing a pointer instead of the object itself.
    But my question is, In object initializer list can a array
    initialization be called? If yes, what is the syntax?
    Thanks
    abir
    toton, Sep 28, 2006
    #1
    1. Advertising

  2. toton wrote:
    > Hi,
    > I can initialize an array of class with a specific class as,
    > class Test{
    > public:
    > Test(int){}
    > };
    > Test x[2] = {Test(3),Test(6)}; using array initialization list. (Note
    > Test do NOT have a default ctor).
    > Is it possible to do so in the class parameter initialization using
    > specific ctor?


    No.

    V
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask
    Victor Bazarov, Sep 28, 2006
    #2
    1. Advertising

  3. toton

    David Harmon Guest

    On 28 Sep 2006 03:50:03 -0700 in comp.lang.c++, "toton"
    <> wrote,
    > private:
    > Test _x;
    > public:
    > TestContainer(int size) : _x(Test(size) {}


    Should be
    TestContainer(int size) : _x(size) {}

    Pay no attention to whether or not it resembles array initialization
    syntax at this point.

    See also "[10.6] Should my constructors use "initialization lists"
    or "assignment"?" in Marshall Cline's C++ FAQ. You can get the FAQ
    at:
    http://www.parashift.com/c -faq-lite/
    David Harmon, Sep 28, 2006
    #3
  4. toton

    mlimber Guest

    toton wrote:
    > Hi,
    > I can initialize an array of class with a specific class as,
    > class Test{
    > public:
    > Test(int){}
    > };
    > Test x[2] = {Test(3),Test(6)}; using array initialization list. (Note
    > Test do NOT have a default ctor).
    > Is it possible to do so in the class parameter initialization using
    > specific ctor?


    You can't with arrays, but you can with std::vector (which you should
    probably be using anyway,
    http://www.parashift.com/c -faq-lite/containers.html#faq-34.1). For
    instance:

    #include <vector>
    using namespace std;

    template<typename T>
    class Initializer
    {
    vector<T> v_;
    public:
    Initializer( const unsigned capacity=0 )
    {
    v_.reserve( capacity );
    }

    Initializer& Add( const T& t )
    {
    v_.push_back(t);
    return *this;
    }

    operator vector<T>() const
    {
    return v_;
    }
    };

    class Example
    {
    const vector<double> v_;
    public:
    Example( double d0, double d1, double d2 )
    : v_( Initializer<double>( 3 )
    .Add(d0)
    .Add(d1)
    .Add(d2) )
    {}
    // ...
    };

    Cheers! --M
    mlimber, Sep 28, 2006
    #4
  5. toton

    Gavin Deane Guest

    toton wrote:
    > But my question is, In object initializer list can a array
    > initialization be called? If yes, what is the syntax?


    Annoyingly, IIRC, arrays are the one thing that cannot be initialised
    in the initialiser list as you would like to.

    Gavin Deane
    Gavin Deane, Sep 28, 2006
    #5
  6. Gavin Deane wrote:
    > toton wrote:
    >> But my question is, In object initializer list can a array
    >> initialization be called? If yes, what is the syntax?

    >
    > Annoyingly, IIRC, arrays are the one thing that cannot be initialised
    > in the initialiser list as you would like to.


    No, structs are also that thing. Aggregates cannot be initialised
    except with default values. There is a proposal on the table, IIRC,
    that might change that.

    V
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask
    Victor Bazarov, Sep 28, 2006
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    3
    Views:
    846
    Peter_Julian
    Oct 10, 2005
  2. Replies:
    6
    Views:
    458
    Ron Natalie
    Dec 11, 2005
  3. Spiro Trikaliotis

    Array initialization when defining the array

    Spiro Trikaliotis, Jun 8, 2007, in forum: C Programming
    Replies:
    5
    Views:
    322
    Spiro Trikaliotis
    Jun 9, 2007
  4. aaragon
    Replies:
    2
    Views:
    616
    James Kanze
    Nov 2, 2008
  5. j j
    Replies:
    4
    Views:
    695
    Alf P. Steinbach
    Jun 23, 2012
Loading...

Share This Page