Russian Qt Forum
Ноябрь 23, 2024, 18:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ALLOC  (Прочитано 5092 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Февраль 22, 2012, 14:59 »

Добрый день

Есть такая макруха
Код
C++ (Qt)
#define ALLOC(allocator, a) ((a *) allocator.Alloc(sizeof(a)))
 
Как бы вместо нее сделать в стиле плюсов?

Спасибо
Записан
BRE
Гость
« Ответ #1 : Февраль 22, 2012, 15:02 »

Как бы вместо нее сделать в стиле плюсов?
В смысле как определить свой оператор new?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Февраль 22, 2012, 15:14 »

В смысле как определить свой оператор new?
Нет, new я сам потом (может) буду делать. Здесь хочется иметь напр нормальный template вместо древнего macro
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Февраль 22, 2012, 16:01 »

Код
C++ (Qt)
class Allocator
{
   public:
       void *Alloc(int s)
       {
           return malloc(s);
       }
       ...
};
 
template <typename T>
T* alloc(Allocator &alc)
{
   return reinterpret_cast<T *>(alc.Alloc(sizeof(T)));
}
 
int main()
{
   Allocator a;
 
   void *p = alloc<int>(a);
 
   std::cout << p << std::endl;
 
   return 0;
}
 

Типа такого? const можно добавить по вкусу.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Февраль 22, 2012, 16:14 »

Типа такого? const можно добавить по вкусу.
Спасибо, такой возможности я не рассматривал. А можно как-то без "перекладной" ф-ции (alloc) которая (на мой вкус) не украшает? Хотелось бы так

Код
C++ (Qt)
MyStruct * s = allocator.Alloc();
 
Но так просто не выходит  Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Февраль 22, 2012, 16:24 »

а аллокатор у тебя свой написан? Судя по всему да, тогда его просто нужно сделать шаблонным, как стандартный allocator из <memory> (или сделать шаблонным метод Alloc(), что вероятно лучше), и можно будет писать

Код
C++ (Qt)
class Allocator
{
   public:
       template<typename T>
       T *Alloc()
       {
           return new T;
       }
       ...
};
 
MyStruct * s = allocator.Alloc<MyStruct>();
 

Без кода самого аллокатора сказать сложно.
« Последнее редактирование: Февраль 22, 2012, 16:27 от Alex Custov » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Февраль 22, 2012, 16:50 »

Да, кастомный аллокатор
Код
C++ (Qt)
MyStruct * s = allocator.Alloc<MyStruct>();
 
Так меня вполне устраивает. Совсем просто, но не сообразил  Улыбающийся
Спасибо
Записан
andrew.k
Гость
« Ответ #7 : Февраль 22, 2012, 16:53 »

Абстрактная фабрика
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Февраль 22, 2012, 17:14 »

Причём здесь абстракция Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
andrew.k
Гость
« Ответ #9 : Февраль 22, 2012, 17:15 »

ХЗ )
Может подойдет для его задачи.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Февраль 22, 2012, 17:16 »

ХЗ )
Может подойдет для его задачи.
Не подойдёт.
Уже начал отмечать 23 февраля? Улыбающийся
Записан

Qt 5.11/4.8.7 (X11/Win)
andrew.k
Гость
« Ответ #11 : Февраль 22, 2012, 17:18 »

ХЗ )
Может подойдет для его задачи.
Не подойдёт.
Уже начал отмечать 23 февраля? Улыбающийся
Ну и ладно) Может и начал)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.366 секунд. Запросов: 23.