инициализация листа из структур
От: QwerTun  
Дата: 14.04.10 15:31
Оценка:
подскажите как быть в таком случае...


struct param {
    int         height;
    int         width;
    int         fps;
    std::string     fn;     
    param(int h, int w, int f, const char* pfn) 
        : height(h)
        , width(w)
        , fps(f)
        , fn(pfn)
    {
    };
};

    static const std::list<param> param_list = {{100,200,30,"c:\123.avi"}};


собственно хочется инициализировать лист параметров через инициализацию ...
как бы такое замутить?
Re: инициализация листа из структур
От: zaufi Земля  
Дата: 14.04.10 15:38
Оценка: 2 (1)
Здравствуйте, QwerTun, Вы писали:

QT>подскажите как быть в таком случае...



QT>
<skip>
QT>    static const std::list<param> param_list = {{100,200,30,"c:\123.avi"}}; 
QT>


QT>собственно хочется инициализировать лист параметров через инициализацию ...

QT>как бы такое замутить?

пока ждешь новый стандарт можно поюзать boost::assign
Re[2]: инициализация листа из структур
От: QwerTun  
Дата: 14.04.10 15:39
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>пока ждешь новый стандарт можно поюзать boost::assign


да к программе в 200-300 строк тащить буст эт како-то избыточно
жаль
придется через обычные массивы тогда
благо через них все ок
Re: инициализация листа из структур
От: _nn_  
Дата: 14.04.10 15:58
Оценка: 2 (1) :)
Здравствуйте, QwerTun, Вы писали:

QT>подскажите как быть в таком случае...



QT>
QT>struct param {
QT>    int         height;
QT>    int         width;
QT>    int         fps;
QT>    std::string     fn;     
QT>    param(int h, int w, int f, const char* pfn) 
QT>        : height(h)
QT>        , width(w)
QT>        , fps(f)
QT>        , fn(pfn)
QT>    {
QT>    };
QT>};

QT>    static const std::list<param> param_list = {{100,200,30,"c:\123.avi"}}; 
QT>


QT>собственно хочется инициализировать лист параметров через инициализацию ...

QT>как бы такое замутить?

Ну можно так:
static const param param_array[] =
{
 param(...),
 param(...)
 ...
};

// Тут и вектор сойдет тоже, все равно не меняется.
// А если нужна скорость то лучше взять что-нибудь на основе hash
static const std::list<param> param_list(&param_array[0], param_array[0] + sizeof(param_array)/sizeof(param_array[0]));


Лучше с boost::array тогда можно проще param_list(param_array.begin(), param_array.end())

P.S.
Можно в конструктор сразу string const& передавать, компилятор уберет лишний конструктор если будет литерал передаваться, а std::string конвертировать в char const* глуповато.

А если требуется инициализация только через литерал, то лучше хранить указатель и размер не копируя вообще. (Там boost::iterator_range какой-нибудь)
Еще быстрее будет

Вот так без буста можно:
struct param {
    int         height;
    int         width;
    int         fps;
    char const*     fn;     
    size_t fn_length;
   
    template<size_t FNLength>
    param(int h, int w, int f, char const (&fn)[FNLength]) 
        : height(h)
        , width(w)
        , fps(f)
        , fn(&fn[0])
        , fn_length(FNLength)
    {
    }

    // Boost::Range эмуляция
    char const* fn_begin() const { return fn; }
    char const* fn_end() const { return fn + fn_length; }
};


P.P.S.
Не надо боятся буст брать. От него все равно никуда не деться
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: инициализация листа из структур
От: QwerTun  
Дата: 14.04.10 16:12
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Не надо боятся буст брать. От него все равно никуда не деться

Да я не боюсь, собирается все с ним дюже медленно ... так что уж ссори, я на обычном массивчеке все набросал, без контенеров
Re[3]: инициализация листа из структур
От: zaufi Земля  
Дата: 14.04.10 16:26
Оценка:
Здравствуйте, QwerTun, Вы писали:

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


Z>>пока ждешь новый стандарт можно поюзать boost::assign


QT>да к программе в 200-300 строк тащить буст эт како-то избыточно

смысле ты раздаешь свою прогу в исходниках и не хочешь заставлять своих юзерей тянуть буст чтобы ее собирать?
Re[3]: инициализация листа из структур
От: _nn_  
Дата: 15.04.10 08:11
Оценка:
Здравствуйте, QwerTun, Вы писали:

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


__>>Не надо боятся буст брать. От него все равно никуда не деться

QT>Да я не боюсь, собирается все с ним дюже медленно ... так что уж ссори, я на обычном массивчеке все набросал, без контенеров

Тут это очень зависит. Да, есть конкретные вещи в бусте, которые медленно комилируются.

В данном случае Boost.Array + Boost.Range не дадут существенного увелечения времени компиляции.
Зато ничего не надо копировать будет и полная работа с итераторами.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.