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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.