LINUX.ORG.RU

инициализация самодельного массива


0

0
Доброго времени суток всем. Подскажите, пжалста, как на плюсах реализуется конструкция вида

char testArray[]={10,255,14,87};

Т. е. как её сделать в самодельном классе, имитирующем массив? Что перегружать надо?

anonymous
1) may be u should to use std::vector or std::string?

2) чем не устраивает new?

class Foo {
private:
char *bar;
public:
Foo(const int size) { bar = new char[size]; } /* по хорошему тут ещё и эксепшн ловить стоит */
~Foo(void) { delete[] bar; }
/* other stuff */
};
asgard
()
Ответ на: комментарий от dilmah
Икскюз МИ!!! Отвлёкся. Да, желательно бы красиво. Если подробнее, то в этом "массиве" могут лежать элементы произвольного типа, но из встроенных (int, float и др.). Чем короче инициализация будет - тем лучше. Смотрел stl, многое не понял, если можно, расскажите подробнее.
anonymous
()
Ответ на: комментарий от anonymous
хм, я думаю, вам стоит почитать страуструпа, конкретнее - главу о шаблонах. после осознания того, что такое шаблон, почитайте про вектор.
asgard
()
Ответ на: комментарий от asgard
Читал, читаю - нет просветления :-(
anonymous
()
Ответ на: комментарий от anonymous
по инициализации, я не могу придумать ничего лучше какого нибудь макроса с переменным числом аргументов, который будет раскрываться в правильную инициализацию.

например:

INIT_VEC(my_vec_t, vec, 2, 5, 10, 50);

будет раскрываться в что-то типа:

my_vec_t vec = MY_VEC_NULL, 2, 5, 10, 50;

где MY_VEC_NULL предопределенная константа некого типа (my_vec_t либо связанного с ним) и для него переопределен оператор запятая, который добавляет элементы по одному.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah
Это почему и как? Вроде бы создаётся объект и инициализируется тут же. Тогда расскажите, плз, подробнее, что и как происходит при

char test[]={10,150,255,66};

а то я не понимаю, что именно я не понимаю.

anonymous
()
Ответ на: комментарий от dilmah
> там не инициализация. Там присваивание.

А так ли это критично? Хардкодить значения больших массивов ни один псих не будет, а для маленьких это большого значения не имеет.

ero-sennin ★★
()
Ответ на: комментарий от anonymous
я имел в виду что в ссылке про blitz++ выше используется присваивание. Это легче, потому что можно переопределить оператор = и запятую и писать так: vec = 3, 5, 10, 30;

но такая фишка не проходит с инициализацией.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah
Расскажите про запятую, в чём ея суть и как ея же перегрузить. У Страуструпа толком про запятую нет, в тырнете тоже туманно расписано.
anonymous
()
Ответ на: комментарий от anonymous
Нашёл чего-то. Буду пробовать.
anonymous
()
> char testArray[]={10,255,14,87};

В текущей версии С++ данный вид синтаксиса для своих типов перегрузить нельзя.

Legioner ★★★★★
()
Посмотри на boost::assign. Может там чего весёлого найдёшь. Да и с STL советую разобраться получше...
Sectoid ★★★★★
()
26 мая 2007 г.
Ответ на: комментарий от anonymous
> Если подробнее, то в этом "массиве" могут лежать элементы произвольного типа, но из встроенных (int, float и др.). Чем короче инициализация будет - тем лучше.

А может, это, ellipsis заюзать?

В принципе, можно ещё и макрос написать, чтоб он сначала через перегрузку запятой (если есть такое) аргументы считал, а потом подавал их как varargs.

Nihilist
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.