Список переменных класса
От: Рома Мик Россия http://romamik.com
Дата: 05.01.03 13:09
Оценка:
Несколько раз мне приходилось писать код вроде следующего:
class Bar;

class Foo
{
    std::list<Bar*> _barlist;
protected:
    AddBar(Bar *bar) { _barlist->push_back(bar); }
    И куча невиртуальных функций _barlist использующих
};

class MyFoo : public Foo
{
    MyBar1 bar11, bar12;
    MyBar2 bar21, bar22;
    MyFoo() : bar11(...), bar12(...), ba21r(...), bar22(...)
    {
        Foo::AddBar(&bar11);
        Foo::AddBar(&bar12);
        Foo::AddBar(&bar21);
        Foo::AddBar(&bar22);
    }
};

У меня такой код вызывает ощущение, что написано много лишнего: каждый bar упоминается три раза. bar'ы это обертки для типов вроде int или string.
Смысл: Я хочу иметь список переменных класса для, например, записи в файл или для того чтобы связать контролы в диалоге с переменными. А на самом деле для всего сразу.

Был вариант такой:
class Bar
{
    Bar(Foo *f) { f->AddBar(this); }
};

Но компилятор волнуется ( и правильно делает ), а вместе с ним и я.

Был еще вариант, когда Bar был не оберткой для значения, а хранил указатель на переменную класса и динамически создавался в конструкторе Foo.
MyFoo::MyFoo() : value(100)
{
Foo::AddBar(new MyBar(&value));
}

Но здесь другие преимущества, количество упоминаний то же.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.