Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Динамический массив произвольного класса


Автор: GVD 29.7.2006, 22:29
Ситуация такова:
 в классе должен быть динамический массив тип данных которого определяется в процессе выполенния программы (BYTE, WORD или DWORD), естественно все операции по обработке элементов массива реализуются в методах данного класса. 
Простое объявление указателя на void не проходит. 
Кто-нибудь что-либо подобное делал? smile  

Автор: Daevaorn 29.7.2006, 22:53
GVD, 
Возможны варианты:
1. union
2. boost::any
3. всё-таки void* 

Автор: GVD 29.7.2006, 23:48
Если брать union, то в методах класса необходимо прописывать разные имена переменных- элементов массива. Наверное проще объявить три массива разного типа. Или я не прав?

Если все-таки void , то исходник плизззз!  smile  Бо я уже сам намаялся.  smile 

Про саму библиотеку boost слышал,  но если можно, то поподробнее. 

Автор: ILAgent 30.7.2006, 00:09
Можно шаблонами, проще - контейнерами. А что за задача, почему всё нельзя DWORD сделать ? 

Автор: GVD 30.7.2006, 00:28
Задача - разработка класса реализации генетического алгоритма. Каждый ген представляется некоторым количеством бит и выбор этого количества пользователь определяет в процессе функционирования программы, т.е. заранее нельзя определить тип массива. 
И насколько я понимаю при использовании шаблонов в классе также необходимо указать тип переменных. Или я не прав? smile   

Автор: Oleg_Ci 30.7.2006, 11:51
Код

#include <stdlib.h>
#include <iostream>
using namespace std;

class gen
{
  // сортировка разных типов массивов :
public:
  template <typename T>
  void fun( T massiv[], int size )
  {
    T buf;
    for ( int i=0; i<size-1; i++ )
      if ( massiv[i]>massiv[i+1] )
      {
        buf = massiv[i];
        massiv[i] = massiv[i+1];
        massiv[i+1] = buf;
        if ((i-=2)<0) i=-1;
      }
  }
};

void main()
{
  int a[3] = {3,5,1};
  float f[3] = {5,4,7};
  gen g;
  g.fun( a, 3 );  // int
  g.fun( f, 3 );  // float
  system("pause");
}
 

Автор: GVD 30.7.2006, 19:52
Всем спасибо!
Сделал с помощью void и memcpy. Шаблоны не подошли (да и не могли).
 smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)