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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Делегат на шаблонах  (Прочитано 17084 раз)
alexis031182
Гость
« Ответ #30 : Июль 07, 2012, 10:29 »

Да, смотрю безопасность тоже через "умный" указатель достигается. Значит, похоже, я правильно задумал. Этот момент важен. Спасибо за наводку, отчего-то упустил это из виду.
Записан
alexis031182
Гость
« Ответ #31 : Июль 07, 2012, 10:49 »

Да, смотрю безопасность тоже через "умный" указатель достигается. Значит, похоже, я правильно задумал. Этот момент важен. Спасибо за наводку, отчего-то упустил это из виду.
Упс. Забыл про auto_ptr. Безопасность уже есть. Объект не будет удалён, если он занят делегатом. Это в моей ситуации лучше, нежели бы делегат не выполнил функцию.
Код
C++ (Qt)
#include "alokifunctor.h"
 
void a() {
   qDebug() << "a()";
}
 
class Base {
public:
   const QString test(const QString &txt) {return txt;}
};
 
int main(int, char**)
{
ALoki::Functor<> functor(&a);
functor();
 
Base *obj = new Base;
typedef const QString(Base::*test)(const QString&);
ALoki::Functor<const QString, ALoki::TypeSequence<const QString&> > functor1(obj, &Base::test);
 
delete obj;
 
qDebug() << functor1("tratata");
 
qDebug() << obj->test("is not deleted!!!");
 
return 0;
}
 
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #32 : Июль 07, 2012, 10:54 »

Безопасность там как раз достигается (как и в boost::signal, и libsigc++) за счёт наследования от класса trackable. Всё, что наследуется от него автоматически становится отслеживаемым. И если объект будет удалён, то об этом тут же все узнают.

А умные указатели там больше для удобства..
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #33 : Июль 07, 2012, 10:56 »

Чёт я не понял про void..
Какие проблемы с возвращающим типом?
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
alexis031182
Гость
« Ответ #34 : Июль 07, 2012, 11:00 »

Безопасность там как раз достигается (как и в boost::signal, и libsigc++) за счёт наследования от класса trackable. Всё, что наследуется от него автоматически становится отслеживаемым. И если объект будет удалён, то об этом тут же все узнают.

А умные указатели там больше для удобства..
А-а, понял. Спасибо. Мне так нельзя. Точнее можно конечно, но мультинаследования я стараюсь избегать.

Я смотрю, в libssc используется новый стандарт языка. Вы не могли бы подсказать, в каких файлах применяются новые конструкции, которые "не потянет" C++?
Записан
alexis031182
Гость
« Ответ #35 : Июль 07, 2012, 11:03 »

Чёт я не понял про void..
Какие проблемы с возвращающим типом?
Возможно и нет проблем, я написал, что поверхностно взглянул. Каким образом тогда можно добиться возврата любого значения, помимо void? Аналогичным Loki способом? Или как-то иначе?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #36 : Июль 07, 2012, 11:12 »

Безопасность там как раз достигается (как и в boost::signal, и libsigc++) за счёт наследования от класса trackable. Всё, что наследуется от него автоматически становится отслеживаемым. И если объект будет удалён, то об этом тут же все узнают.

А умные указатели там больше для удобства..
А-а, понял. Спасибо. Мне так нельзя. Точнее можно конечно, но мультинаследования я стараюсь избегать.

Я смотрю, в libssc используется новый стандарт языка. Вы не могли бы подсказать, в каких файлах применяются новые конструкции, которые "не потянет" C++?

Из нового стандарта там пока только decltype используется. А std::shared_ptr можно и самому своять.
У меня где то был рукописный)

Цитировать
Возможно и нет проблем, я написал, что поверхностно взглянул. Каким образом тогда можно добиться возврата любого значения, помимо void? Аналогичным Loki способом? Или как-то иначе?
А понял, чего вы хотите. Нет, в libssc такого нет. Поскольку для системы сигнал-слот это как то не свойственно.. Но сделать это можно. В boost::signal это реализовано.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
alexis031182
Гость
« Ответ #37 : Июль 07, 2012, 11:20 »

Из нового стандарта там пока только decltype используется. А std::shared_ptr можно и самому своять.
У меня где то был рукописный)
Поделитесь, если есть возможность. Эта тема мне интересна.

А понял, чего вы хотите. Нет, в libssc такого нет. Поскольку для системы сигнал-слот это как то не свойственно..
Да, разные идеологии. Делегат - "жёсткая" обёртка, если можно так выразиться.

Но сделать это можно. В boost::signal это реализовано.
В Loki возвращаемое значение передаётся как аргумент шаблона по всей иерархии классов. Вы примерно не можете подсказать, насколько отличается этот подход от boost'а?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #38 : Июль 07, 2012, 11:41 »

Цитировать
Поделитесь, если есть возможность. Эта тема мне интересна.
Ну про decltype можно почитать, например здесь: http://www.quizful.net/post/cpp0x-auto-decltype
Доморощенный counted_ptr, аналог std::shared_ptr приаттачил. Но лучше юзать std::shared_ptr.

Цитировать
В Loki возвращаемое значение передаётся как аргумент шаблона по всей иерархии классов. Вы примерно не можете подсказать, насколько отличается этот подход от boost'а?

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

 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
alexis031182
Гость
« Ответ #39 : Июль 07, 2012, 11:56 »

Ну про decltype можно почитать, например здесь: http://www.quizful.net/post/cpp0x-auto-decltype
Доморощенный counted_ptr, аналог std::shared_ptr приаттачил. Но лучше юзать std::shared_ptr.
Спасибо.

Не знаю как это в бусте сделано. Надо исходники курить) Я особо этим не интересовался, поскольку не было необходимости в этом. Знаю только, что там это возможно.
Да, тоже где-то видел ссылку на то, что буст имеет свою реализацию делегата. Но пока тогда остановлюсь на варианте Loki (вполне возможно, что в бусте та же логика).
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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