crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

5 страниц V  < 1 2 3 4 5 >  
Ответить в данную темуНачать новую тему
> Шаблон проектирования Singleton (одиночка), подбираю подходящий для моей задачи
Litkevich Yuriy
  опции профиля:
сообщение 14.5.2008, 10:29
Сообщение #21


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


=1=
ViGOur, у меня компилер ругается на такую строчку, из твоего варианта "одиночки":
operator=( const CSingleton&){}

говорит так:
Цитата
singleton.h:26: error: ISO C++ forbids declaration of `operator=' with no type

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

=2=
Обязательно ли мои методы, не отоносящиеся к основным "одиночки" типа InitInstance() и FreeInstance(), помечать как sttic?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 14.5.2008, 11:11
Сообщение #22


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Цитата(Litkevich Yuriy @ 14.5.2008, 11:29) *
=1=
ViGOur, у меня компилер ругается на такую строчку, из твоего варианта "одиночки":
operator=( const CSingleton&){}

говорит так:
Цитата
singleton.h:26: error: ISO C++ forbids declaration of `operator=' with no type

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

Попробуй вот так специфицировать
CSingleton& operator=( const CSingleton& )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 14.5.2008, 11:36
Сообщение #23


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Andrew Selivanov @ 14.5.2008, 12:11) *
Попробуй вот так специфицировать
Угу, я забыл написать... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.5.2008, 11:43
Сообщение #24


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


тогда вот так ругается :
Цитата
singleton.h:26: warning: no return statement in function returning non-void

хоть и не ошибка, но неприятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LuckLess
  опции профиля:
сообщение 14.5.2008, 11:44
Сообщение #25


Студент
*

Группа: Новичок
Сообщений: 31
Регистрация: 10.10.2007
Пользователь №: 8

Спасибо сказали: 0 раз(а)




Репутация:   0  


return *this;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.5.2008, 11:46
Сообщение #26


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


LuckLess, да вот так:
Session& operator=(const Session&){return *this;}

вообще не ругается
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LuckLess
  опции профиля:
сообщение 14.5.2008, 11:56
Сообщение #27


Студент
*

Группа: Новичок
Сообщений: 31
Регистрация: 10.10.2007
Пользователь №: 8

Спасибо сказали: 0 раз(а)




Репутация:   0  


еще такой вариант синглтона..
template <class T, int I = 0>
class LLSingleton
   {
private:
   LLSingleton ();
   LLSingleton (const LLSingleton&);
   LLSingleton& operator= (const LLSingleton&);
public:
   static T* Get ()
      {
      static T inst_;
      return &inst_;
      }
   };

typedef LLSingleton<int> TInt1;
typedef LLSingleton<int, 1> TInt2;

int main ()
   {
   *TInt1::Get () = 77;
   *TInt2::Get () = 88;

   std::cout << *TInt1::Get () << " " << *TInt2::Get ();
   }
Причина редактирования: поправил тег: code=cpp, так нагляднее
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.5.2008, 12:08
Сообщение #28


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а для чего int I, она ведь неиспользуется, в шаблоне?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LuckLess
  опции профиля:
сообщение 14.5.2008, 14:13
Сообщение #29


Студент
*

Группа: Новичок
Сообщений: 31
Регистрация: 10.10.2007
Пользователь №: 8

Спасибо сказали: 0 раз(а)




Репутация:   0  


для того чтобы ты мог создать два разных синглтона, одного типа.
например у тебя есть class User; ты хочеш чтобы был скажем глобальный залогиненный юзер - пишеш
typedef LLSingleton<User> LoggedUser;
далее ты хочеш еще иметь некого глобального юзера, под которым программа имеет доступ к базе..
пишеш
typedef LLSingleton<User, 1> DbUser;

получиш два разных синглтона, которые оба возвращают User*.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.5.2008, 12:50
Сообщение #30


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


с каждым днем начинаю понимать пользу от единственного экземпляра класса, раньше думал: "пиши окуратно и дело с концом", а на практике выходит, что окуратность особо и не причем :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

5 страниц V  < 1 2 3 4 5 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 2:23