Песнь про синглтоны
От: Alexey Chen Чили  
Дата: 13.10.04 18:17
Оценка: 77 (12)
Нда. Не буду больше пользоваться словом 'шутка' и другими неоднозначными словами. Дабы не вызывать непонимания.

В общем, изветная ситуация Singleton::Instance().DoIt(). Вот этот самый Instance меня писать слегка задолбало. Ведь с точки зрения программы, что такое синглтон. Ну, грубо говоря, статический общедоступный обьект, создаваемый по требованию. И подумалось мне, что бы к нему можно было бы обращатся как Singleton->DoIt(). И писать меньше и логично. Ничего сверхестественного, просто интересный взгляд на известную вещь.

#include <stdio.h>

struct Singleton_ {
  struct Gate; friend struct Gate;
  struct Gate {
    Singleton_* operator->() { // типа GetInstance
      static Singleton_ instance;
      return &instance;
    }
  };
  void DoIt() { printf("doit\n"); }
  ~Singleton_() { printf("~Singleton()\n"); }
private:
  //static void operator delete(void*);
  Singleton_() { printf("Singleton()\n");}
};
static Singleton_::Gate Singleton; // этот обьект как бы и не существует вовсе :)

void main(void) {
  Singleton->DoIt();
}


Может где и было, но не встречал.
Re: Песнь про синглтоны
От: _Winnie Россия C++.freerun
Дата: 13.10.04 20:10
Оценка: 1 (1) :))) :))
Здравствуйте, Alexey Chen, Вы писали:
AC>

AC>void main(void) {
AC>  Singleton->DoIt();
AC>}
AC>


Красота! Спасибо, мастер Suda-Chen.
И не обращайте внимания на тех, кто скажет про int main().
Правильно работающая программа — просто частный случай Undefined Behavior
Re: Песнь про синглтоны
От: Аноним  
Дата: 14.10.04 08:03
Оценка:
У меня сахар такой — Singleton().DoIt();
Ф-ция Singleton() возвращает Singleton::Instance().

Кроме того, вместо
struct Gate; friend struct Gate;
struct Gate {
...
}
Можно писать прямо
friend struct Gate {
...
}
Re[2]: Песнь про синглтоны
От: Alexey Chen Чили  
Дата: 14.10.04 11:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня сахар такой — Singleton().DoIt();

А>Ф-ция Singleton() возвращает Singleton::Instance().
Ну я же написал, что, грубо говоря, синглтон это обьект...

А>Можно писать прямо

А>friend struct Gate {
А>...
А>}
Ну про VS 6.0 я говорить не буду, с ним и так все понятно.
Есть в природе еще и такой замечательный компилятор Sun C++ — он это тоже очень не любит. В отличии от void main
А мне под ним часто писать приходится.
Re[2]: Песнь про синглтоны
От: Alexey Chen Чили  
Дата: 14.10.04 12:24
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>Здравствуйте, Alexey Chen, Вы писали:

AC>>

AC>>void main(void) {
AC>>  Singleton->DoIt();
AC>>}
AC>>


_W>Красота! Спасибо, мастер Suda-Chen.

_W>И не обращайте внимания на тех, кто скажет про int main().


Наздоровье.

Когда очень долго ковыряешь драйвера, пытясь прикрутить к давно уже отлаженому и соптимизированному коду нечто совсем левое, что вдруг понадобилось маркетологам, мозг начинает плавиться и еще не такое в голову приходит. Вот от тоски еще и виртуальный конструктор нарисовал. По следам недавнего топика о их существовании и природе.
Re[3]: Песнь про синглтоны
От: Аноним  
Дата: 14.10.04 12:25
Оценка:
Здравствуйте, Alexey Chen, Вы писали:

А>>У меня сахар такой — Singleton().DoIt();

А>>Ф-ция Singleton() возвращает Singleton::Instance().
AC>Ну я же написал, что, грубо говоря, синглтон это обьект...
У меня это больше похоже на объект, поскольку используется точка, а не ->. Дело вкуса, короче.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.