Массив любого типа
От: Чили Россия  
Дата: 12.12.04 06:29
Оценка:
Можно ли создать следущюю конструкцию,
void* New(<type>, int size)
{
return (void*)(new <type>[size]);
}
New(int, 5);
где <type> — имя типа данных?
Re: Массив любого типа
От: _nn_  
Дата: 12.12.04 07:31
Оценка:
Здравствуйте, Чили, Вы писали:

Ч>Можно ли создать следущюю конструкцию,

Ч>void* New(<type>, int size)
Ч>{
Ч> return (void*)(new <type>[size]);
Ч>}
Ч>New(int, 5);
Ч>где <type> — имя типа данных?

Что-то не ясен смысл в этом примере.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Массив любого типа
От: HiFix Россия  
Дата: 12.12.04 08:14
Оценка:
Здравствуйте, Чили, Вы писали:

Ч>Можно ли создать следущюю конструкцию,

Ч>void* New(<type>, int size)
Ч>{
Ч> return (void*)(new <type>[size]);
Ч>}
Ч>New(int, 5);
Ч>где <type> — имя типа данных?
А зачем так? Если ты хочеше чтобы был тип массива в котором могут храниться любые типы, то используй шаблоны, например std::vector<T>, где T — это нужный тебе тип. Или я чего-то не понял?
... << RSDN@Home ...и тишина... а по бокам мертвые с косами стоят...
Не бейте, я только учусь
Re[2]: Массив любого типа
От: Чили Россия  
Дата: 12.12.04 08:15
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Что-то не ясен смысл в этом примере.

Я хочу создавать массивы любых типов одной функцией, и причем тип передавать в живую.
Например,
void* a = New(int, 5); // a — это массив из целых чисел длинной 5 элеметов
void* b = New(double, 5);// b — это массив из double длинной 5 элеметов
Re[3]: Массив любого типа
От: _nn_  
Дата: 12.12.04 08:23
Оценка:
Здравствуйте, Чили, Вы писали:

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


__>>Что-то не ясен смысл в этом примере.

Ч>Я хочу создавать массивы любых типов одной функцией, и причем тип передавать в живую.
Ч>Например,
Ч>void* a = New(int, 5); // a — это массив из целых чисел длинной 5 элеметов
Ч>void* b = New(double, 5);// b — это массив из double длинной 5 элеметов

Обычный вызов new[] дает такой же результат:
void* a = new int[5];
void* b = new double[5];

А если вам надо работать с указателями то зачем их объявлять как void* ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Массив любого типа
От: yxiie Украина www.enkord.com
Дата: 12.12.04 09:00
Оценка:
Здравствуйте, Чили, Вы писали:

Ч>Можно ли создать следущюю конструкцию,

Ч>void* New(<type>, int size)
Ч>{
Ч> return (void*)(new <type>[size]);
Ч>}
Ч>New(int, 5);
Ч>где <type> — имя типа данных?

template <class type>
void* New(int size) {
    return (void*)(new type[size]);
}

// используем:
void* a = New<int>(5);


ты так хотел?
... << RSDN@Home 1.1.3 stable >>
Re: Массив любого типа
От: Tonal- Россия www.promsoft.ru
Дата: 12.12.04 09:24
Оценка:
Здравствуйте, Чили, Вы писали:

Ч>Можно ли создать следущюю конструкцию,

Ч>void* New(<type>, int size)
Ч>{
Ч> return (void*)(new <type>[size]);
Ч>}
Ч>New(int, 5);
Ч>где <type> — имя типа данных?
Тебе это надо было?
template <class T>
T* New(<type>, int size) {
    return new T[size];
}


А чем std::vector не устроил?
... << RSDN@Home 1.1.4 beta 3 rev. 240>>
Re[2]: Массив любого типа
От: Tonal- Россия www.promsoft.ru
Дата: 12.12.04 10:07
Оценка:
Здравствуйте, Tonal-, Вы писали:

Извините, описка:
Вместо
T* New(<type>, int size) {

надо естественно
T* New(int size) {
... << RSDN@Home 1.1.4 beta 3 rev. 240>>
Re: Массив любого типа
От: 8bits Россия  
Дата: 12.12.04 10:50
Оценка:
Здравствуйте, Чили, Вы писали:

Ч>Можно ли создать следущюю конструкцию,

Ч>void* New(<type>, int size)
Ч>{
Ч> return (void*)(new <type>[size]);
Ч>}
Ч>New(int, 5);
Ч>где <type> — имя типа данных?

Сделать то, что вы хотите, я не смог, но есть следующий вариант:
// main.cpp -----------------------------------------------
#include <cstdio>



template <class t, unsigned int size>
class array
 {
  public:
   //конструктор 
   array() { arrayPtr = new t [size]; }
   //деструктор
   ~array() { delete [] arrayPtr; }
   //не-const индексация
   t & operator[](unsigned int i) { return arrayPtr[i]; } 
   //const индексация
   const t & operator[](unsigned int i) const { return arrayPtr[i]; }
  private:
   t * arrayPtr;  
 }; 
 
 
 
int main()
 {
  array<int, 5> a;
  
  a[1] = 8;
  printf("a[1] is: %d\n", a[1]);
  getchar();
  return 0;
 } 
// конец main.cpp --------------------------------------------
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.