Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 ... 3 4 5 [6]   Вниз
  Печать  
Автор Тема: борьба с шаблонами  (Прочитано 133350 раз)
0 Пользователей и 1 Гость смотрят эту тему.
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #150 : 03-01-2010 11:17 » 

Алексей1153++,
Цитата
Дык я знаю разницу между виртуальным и не виртуальным деструктором, только к данному случаю то это какое отношение

ты же пишешь аллокатор, если он хапает память (а он только это и делает Улыбаюсь ) и если в деструкторе он эту память освобождает (а именно так и будет), то пиши пропало...

Цитата
А  "Ctrl-C" - это о чём ? У мну в студии нет такого сочетания )
это грохает прогу запущенную из комадной строки в консоли (типа когда ты ее запустил из студии)
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #151 : 03-01-2010 14:37 » 

Цитата
ты же пишешь аллокатор, если он хапает память
Ну, то есть, в случае наследования он, конечно, что-то и захапает, только я же его мемберами то не пользуюсь. Так что, в Багдаде полная спокуха на этот счёт ) Ну я уже понял, что наследовать не надо, смысла нету, просто содрать из исходников код и переписать
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #152 : 03-01-2010 23:56 » 

Пушистый... я тебя ПОКУСАЮ!!! прочитай зачем нужен виртуальный деструктор!!! В Багдаде все плохо - места нет, все аллокатор, падла, сожрал, потому что пушистый не знает зачем нужен виртуальный деструктор!!!
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #153 : 04-01-2010 03:58 » 

Багдад мирно спит Улыбаюсь
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #154 : 04-01-2010 04:01 » 

Не Улыбаюсь еще нет Улыбаюсь)
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #155 : 08-01-2010 20:47 » 

Ну а всё-таки:
насколько я понял по экспериментам, то когда вызывается метод вектора resize и происходит увеличение размера вектора, то конструктор типа элемента вектора вызывается один раз. А потом, так понимаю, содержимое этого "эталона" копируется в новые экземпляры. Так ? То есть, я к чему, если в конструкторе завести, к примеру, статический счётчик - он будет неправильно подсчитывать количество созданных экземпляров ?
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #156 : 08-01-2010 23:31 » 

Думаю, он в любом случае будет неправильно подсчитывать - потому что экземпляры в массе своей будут порождаться конструктором копирования, а если поставить счётчик и там - то будет весьма сложно определить, сколько экземпляров создаётся по делу, потому что при операциях над вектором значения также будут копироваться.

Насчёт механизма копирования вектора не уверен - надо смотреть исходники. По-моему, должен делаться realloc силами аллокатора, а вот как затем происходит копирование - подозреваю, с помощью копирующего конструктора. Боюсь соврать.
« Последнее редактирование: 08-01-2010 23:36 от Вад » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #157 : 09-01-2010 05:28 » 

Ну мне как бы счётчик и не нужен, я пытаюсь разобраться, сколько раз конструктор вызовется при увеличении вектора на N элементов
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #158 : 12-05-2010 09:31 » 

пытаюсь сделать такую вещь: имеется несколько структур, и нужно, чтобы они все были такого вида

Код:
#pragma pack(push,1)
struct s1
{
union
{
struct
{
BYTE m_body7[7];//общий тел
};

struct
{
//7 байтов структуры s1
BYTE by;
WORD w;
DWORD dwd;
};

};
};

struct s2
{
union
{
struct
{
BYTE m_body7[7];//общий тел
};

struct
{
//7 байтов структуры s2
WORD wd1;
WORD wd2;
WORD wd3;
BYTE by1;
};

};
};
#pragma pack(pop)

пытаюсь зашаблонить:

Код:
#pragma pack(push,1)
template<typename T>
union u_PutData
{
struct {BYTE m_body7[7];}; //общий тел
struct :public T{}; //разные данные
u_PutData()
{
::memset(&m_body7,0,sizeof(m_body7));
}
};
#pragma pack(pop)

но при определении конечных структурок не получается задать параметр T как безымянный, то есть так:

Код:
struct s2:public u_PutData
<
struct //безымянная структура - хочу так!!!
{
WORD wd1;
WORD wd2;
WORD wd3;
BYTE by1;
};
>{};

как это сделать или сделать максимально похоже ?
« Последнее редактирование: 12-05-2010 09:34 от Алексей1153++ » Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #159 : 12-05-2010 10:20 » 

А почему ты так хочешь? Улыбаюсь В смысле, чего добиваешься - спрятать структуру? От кого? От этого зависит, что будет означать "сделать похоже".
Кроме того, от union наследоваться не получится.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #160 : 12-05-2010 13:24 » 

По-моему это бессмысленная затея с union. Достаточно:

Код: (C++)
#include <iostream>

struct X
{
   unsigned char x;
};

template<class T>
class U
{
private:
   T instance;
public:
   unsigned char *getBody()
   {
      return reinterpret_cast<unsigned char *>(&this->instance);
   }
   T *operator->()
   {
      return &this->instance;
   }
};

int main()
{
   U<X> x;
   x->x = 'X';
   std::cout << x->getBody()[0] << std::endl;
   return 0;
}
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #161 : 12-05-2010 14:23 » 

Dimka, да, наверное так проще. Ещё в конструктор в дебаге добавлю контроль на размер в 7 байтов

Вад, да фигнёй, похоже, я страдаю ) Все структуры должны быть 7 байтов, содержимое же разное. Вот и хотел эту семёрку так обеспечить. Наследование не требуется
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #162 : 12-05-2010 14:27 » 

и всё же интересно - можно ли безымянную структуру как параметр шаблона передать ))
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #163 : 12-05-2010 14:46 » 

кстати, ещё проще можно сделать Улыбаюсь
Код:
#pragma pack(push,1)
union sX
{
BYTE m_body7[7];//общий тел

struct s1
{
BYTE by;
WORD w;
DWORD dwd;
}m_s1;

struct s2
{
WORD wd1;
WORD wd2;
WORD wd3;
BYTE by1;
}m_s2;
};
#pragma pack(pop)

« Последнее редактирование: 12-05-2010 17:52 от Алексей1153++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #164 : 01-08-2010 16:33 » 

для этих целей есть специальная инструкция,
Код:
template class Dinamic<int>; 

блин, ну не получается у меня всё равно шаблонный метод в файл реализации выпихнуть (

да что там в файл, даже в одном файле не хотит компилироваться (по крайней мере в 6-й студии)

Код:
class A
{
public:
   template<typename T>
   int F(T t,int i);
};

template<typename T>
int A::F(T t,int i)
{
   return 0;
}

main()
{
   A a;
   a.F("1",1);
}

error C2893: Failed to specialize function template 'int __thiscall A::F(T,int)'
        With the following template arguments:
        'char *'


А вот в девятке безо всяких пинков - идеально  выходит )

-------------------------------------------------
Хм, а вот тоже нифига не идеально. На этом простеньком примере всё ок, в на большом проекте заупрямился линкер - начал жаловаться на неразрешённые внешние элементы

А вышеупомянутую инструкцию не могу понять, как применить - ведь у меня не класс, а функция шаблонная )))
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #165 : 03-08-2010 04:26 » 

Алексей1153++, давай договоримся, что "шестёрка" и C++ это разные вещи Улыбаюсь
Записан

Странно всё это....
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #166 : 03-08-2010 05:08 » 

Та речь не про шестёрку уже Улыбаюсь Но я победил при помощи промежуточной не шаблонной функции (нечто вроде специализации)
Записан

Страниц: 1 ... 3 4 5 [6]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines