подскажите как быть в таком случае...
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"}};
собственно хочется инициализировать лист параметров через инициализацию ...
как бы такое замутить?
Здравствуйте, QwerTun, Вы писали:
QT>подскажите как быть в таком случае...
QT><skip>
QT> static const std::list<param> param_list = {{100,200,30,"c:\123.avi"}};
QT>
QT>собственно хочется инициализировать лист параметров через инициализацию ...
QT>как бы такое замутить?
пока ждешь новый стандарт можно поюзать boost::assign
Здравствуйте, zaufi, Вы писали:
Z>пока ждешь новый стандарт можно поюзать boost::assign
да к программе в 200-300 строк тащить буст эт како-то избыточно

жаль

придется через обычные массивы тогда

благо через них все ок
Здравствуйте, 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(¶m_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.
Не надо боятся буст брать. От него все равно никуда не деться
Здравствуйте, _nn_, Вы писали:
__>Не надо боятся буст брать. От него все равно никуда не деться
Да я не боюсь, собирается все с ним дюже медленно ... так что уж ссори, я на обычном массивчеке все набросал, без контенеров
Здравствуйте, QwerTun, Вы писали:
QT>Здравствуйте, zaufi, Вы писали:
Z>>пока ждешь новый стандарт можно поюзать boost::assign
QT>да к программе в 200-300 строк тащить буст эт како-то избыточно 
смысле ты раздаешь свою прогу в исходниках и не хочешь заставлять своих юзерей тянуть буст чтобы ее собирать?
Здравствуйте, QwerTun, Вы писали:
QT>Здравствуйте, _nn_, Вы писали:
__>>Не надо боятся буст брать. От него все равно никуда не деться
QT>Да я не боюсь, собирается все с ним дюже медленно ... так что уж ссори, я на обычном массивчеке все набросал, без контенеров
Тут это очень зависит. Да, есть конкретные вещи в бусте, которые медленно комилируются.
В данном случае Boost.Array + Boost.Range не дадут существенного увелечения времени компиляции.
Зато ничего не надо копировать будет и полная работа с итераторами.