Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 23.08.2009, 00:04   #1
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
СИНГЛТОНЫ

Да что за %&^18#*! На кой :?№* такие извращения? Почему незя нормально юзать глоб переменные в раздельной компиляции?

в общем,

я взял с википедии такую штуку:

template<typename T> class Singleton
{

public:
static T& Instance()
{
static T theSingleInstance; // у класса T есть конструктор по умолчанию
return theSingleInstance;
}
};


потом допустим юзаю так:

class Render:public Singleton<Render> {
public:
void BlahBlahBlah();
};

но когда я пишу так:

Render::Instance() ТО хренов MSVC++ ни фига не одобряет добавление '->' хотя по идее инстанс должен вовзращать указатель (разве нет?)

если не сложно, накатайте кто-нибудь простейший пример юзанья синглтона, на геймдеве нашёл ссылку токо на жыыырный код.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 23.08.2009, 00:47   #2
Horror
Бывалый
 
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений
(для 110 пользователей)
Ответ: СИНГЛТОНЫ

я тож новичек в си
но мне что подсказывает что указаетель это *
static T* Instance()
а асперсант это ссылка вроде)
и соответсвенно
static T* Instance()
{
  static T theSingleInstance; // у класса T есть конструктор по умолчанию
  return &theSingleInstance;
} так чтоли (
и так должно по стрелке!
и вообще както не читабельно код офрмлен)

и я не уверен что статик делает глобыльным?
вроде extern, а статик внутри модуля
(Offline)
 
Ответить с цитированием
Старый 23.08.2009, 12:03   #3
jimon
 
Сообщений: n/a
Ответ: СИНГЛТОНЫ

вот довольно качественное решение :
1) в хидере где нужен доступ к синглтону пишем
EXPORT_TYPE my_type * EXPORT_CALL GetMyType();
EXPORT_TYPE void EXPORT_CALL CreateSingletonMyType();
2) в реализации пишем такое :
my_type * _self_my_type = NULL;
my_type * EXPORT_CALL GetMyType()
{
return _self_my_type;
}
void EXPORT_CALL CreateSingletonMyType()
{
_self_my_type = new my_type;
}
void SetMyType(my_type * _self)
{
if (_self_my_type && ( _self != NULL))
{
FATAL_ERROR
}
else
_self_my_type = _self;
}


my_type::my_type()
{
SetMyType(this);
...
}

my_type::~my_type()
{
SetMyType(NULL);
}
3) в функции инициализации библиотеки просто вызываем CreateSingletonMyType, а потом просто удалям нужный нам класс и всё
в принципе CreateSingletonMyType можно и не выносить на обозрение

ps. всё это делается через макросы
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
Horror (23.08.2009), Mr_F_ (23.08.2009)
Старый 23.08.2009, 23:34   #4
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Ответ: СИНГЛТОНЫ

Автор, метод instance() возвращает ссылку. Используй вместо стрелки (->) точку (.).
(Offline)
 
Ответить с цитированием
Старый 23.08.2009, 23:57   #5
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: СИНГЛТОНЫ

да, все уже разобрался

слово "синглтон" испугало меня и не дало увидеть суть
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 01:47.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com