Занесение объектов в список
От: Shein Украина  
Дата: 12.06.07 07:18
Оценка:
Добрый день
Имеется следующая схема кода
class BaseClass
{
};

class SomeClass1 : public BaseClass
{
};

class SomeClass2 : public BaseClass
{
};
// ...
class SomeClassN : public BaseClass
{
};

class ClassList
{
private:
    SomeClass1 m_obj1;
    SomeClass2 m_obj2;
    //...     
    SomeClassN m_objN;

    list<BaseClass*> m_list;    
};

Необходимо занести объекты m_obj1..m_objN в список m_list.
Есть ли какой-то элегантный способ заполнить список?
Шаблоны и кучу нельзя использовать.
Спасибо
Re: Занесение объектов в список
От: Lorenzo_LAMAS  
Дата: 12.06.07 07:23
Оценка:
Здравствуйте, Shein, Вы писали:

S>Добрый день

S>Имеется следующая схема кода
S>
S>class BaseClass
S>{
S>};

S>class SomeClass1 : public BaseClass
S>{
S>};

S>class SomeClass2 : public BaseClass
S>{
S>};
S>// ...
S>class SomeClassN : public BaseClass
S>{
S>};

S>class ClassList
S>{
S>private:
S>    SomeClass1 m_obj1;
S>    SomeClass2 m_obj2;
S>    //...     
S>    SomeClassN m_objN;

S>    list<BaseClass*> m_list;    
S>};
S>

S>Необходимо занести объекты m_obj1..m_objN в список m_list.
S>Есть ли какой-то элегантный способ заполнить список?
S>Шаблоны и кучу нельзя использовать.
S>Спасибо

ClassList::ClassList()
{
   m_list += &m_obj1, &m_obj2, &m_obj3 ....
}


это элегантно или нет? если да — то посмотри boost::assign
Of course, the code must be complete enough to compile and link.
Re[2]: Занесение объектов в список
От: Shein Украина  
Дата: 12.06.07 07:55
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>это элегантно или нет? если да — то посмотри boost::assign


Всё равно приходится перечислять все объекты при добавлении в список.

class ClassList;

class BaseClass
{
public:
   BaseClass(ClassList* p)
   {
      // add this to list
   }
};

class SomeClass1 : public BaseClass
{
public:
   SomeClass1(ClassList *p): BaseClass(p)
   {
   }
};

class SomeClass2 : public BaseClass
{
public:
   SomeClass2(ClassList *p): BaseClass(p)
   {
   }
};

class SomeClass3 : public BaseClass
{
public:
   SomeClass3(ClassList *p): BaseClass(p)
   {
   }
};

class Devices
{
private:
   SomeClass1 m_obj1;
   SomeClass2 m_obj2;
   SomeClass3 m_obj3;    

public:
   Devices(ClassList* p):
      m_obj1(p), m_obj2(p), m_obj3(p) {}
};

class ClassList
{
private:
   char m_objects[sizeof(Devices)];

   list<BaseClass*> m_list;
public:
   ClassList()
   {
      Devices *p;
     
      p = new (m_objects) Devices(this);
   }
};

Но пожалуй это уже слишком
Проще будет просто поэлементно заполнить список
Re: Занесение объектов в список
От: Centaur Россия  
Дата: 12.06.07 10:34
Оценка: +2 :)
Здравствуйте, Shein, Вы писали:

S>class ClassList
S>{
S>    list<BaseClass*> m_list;    
S>};
S>

S>Необходимо занести объекты m_obj1..m_objN в список m_list.
S>Есть ли какой-то элегантный способ заполнить список?
S>Шаблоны и кучу нельзя использовать.
Если шаблоны использовать нельзя, то нет ни элегантного, ни неэлегантного способа заполнить список, ни самого списка.
Re: Занесение объектов в список
От: Seon  
Дата: 12.06.07 10:43
Оценка:
Здравствуйте, Shein, Вы писали:

S>Добрый день

S>Имеется следующая схема кода
S>
S>class BaseClass
S>{
S>};

S>class SomeClass1 : public BaseClass
S>{
S>};

S>class SomeClass2 : public BaseClass
S>{
S>};
S>// ...
S>class SomeClassN : public BaseClass
S>{
S>};

S>class ClassList
S>{
S>private:
S>    SomeClass1 m_obj1;
S>    SomeClass2 m_obj2;
S>    //...     
S>    SomeClassN m_objN;

S>    list<BaseClass*> m_list;    
S>};
S>

S>Необходимо занести объекты m_obj1..m_objN в список m_list.
S>Есть ли какой-то элегантный способ заполнить список?
S>Шаблоны и кучу нельзя использовать.
S>Спасибо

Что за ненужный мудреж?
Копипаст в этом случае будет самым элегантным.
Re[2]: Занесение объектов в список
От: Аноним  
Дата: 12.06.07 14:26
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Если шаблоны использовать нельзя, то нет ни элегантного, ни неэлегантного способа заполнить список, ни самого списка.

Список я указал для наглядности, в действительности же там используется массив.
Re: Занесение объектов в список
От: Sni4ok  
Дата: 12.06.07 16:25
Оценка:
Здравствуйте, Shein, Вы писали:

S>
S>    SomeClass1 m_obj1;
S>    SomeClass2 m_obj2;
S>    //...     
S>    SomeClassN m_objN;

S>    list<BaseClass*> m_list;    
S>


если N достаточно велико, то проще закатать в макросы, 1го BOOST_PP_REPEAT'а хватит
Re[3]: Занесение объектов в список
От: dotidot Россия  
Дата: 13.06.07 06:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Centaur, Вы писали:


C>>Если шаблоны использовать нельзя, то нет ни элегантного, ни неэлегантного способа заполнить список, ни самого списка.

А>Список я указал для наглядности, в действительности же там используется массив.
если массив, то можно так:
BaseClass* array[]={new SomeClass1(), new SomeClass2(), new SomeClass3()};
1. естественно размер массива уже не поменяешь.
2. если не сработают new или конструкторы, то будет не знаю что.
Re[4]: Занесение объектов в список
От: dotidot Россия  
Дата: 13.06.07 06:45
Оценка:
Здравствуйте, dotidot, Вы писали:

D>1. естественно размер массива уже не поменяешь.

D>2. если не сработают new или конструкторы, то будет не знаю что.
3. надо не забыть потом delete ом по массиву пройтись
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.