Нда. Не буду больше пользоваться словом 'шутка' и другими неоднозначными словами. Дабы не вызывать непонимания.
В общем, изветная ситуация Singleton::Instance().DoIt(). Вот этот самый Instance меня писать слегка задолбало. Ведь с точки зрения программы, что такое синглтон. Ну, грубо говоря, статический общедоступный обьект, создаваемый по требованию. И подумалось мне, что бы к нему можно было бы обращатся как Singleton->DoIt(). И писать меньше и логично. Ничего сверхестественного, просто интересный взгляд на известную вещь.
#include <stdio.h>
struct Singleton_ {
struct Gate; friend struct Gate;
struct Gate {
Singleton_* operator->() { // типа GetInstancestatic 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();
}
Здравствуйте, Аноним, Вы писали:
А>У меня сахар такой — Singleton().DoIt(); А>Ф-ция Singleton() возвращает Singleton::Instance().
Ну я же написал, что, грубо говоря, синглтон это обьект...
А>Можно писать прямо А>friend struct Gate { А>... А>}
Ну про VS 6.0 я говорить не буду, с ним и так все понятно.
Есть в природе еще и такой замечательный компилятор Sun C++ — он это тоже очень не любит. В отличии от void main
А мне под ним часто писать приходится.
_W>Красота! Спасибо, мастер Suda-Chen. _W>И не обращайте внимания на тех, кто скажет про int main().
Наздоровье.
Когда очень долго ковыряешь драйвера, пытясь прикрутить к давно уже отлаженому и соптимизированному коду нечто совсем левое, что вдруг понадобилось маркетологам, мозг начинает плавиться и еще не такое в голову приходит. Вот от тоски еще и виртуальный конструктор нарисовал. По следам недавнего топика о их существовании и природе.
Re[3]: Песнь про синглтоны
От:
Аноним
Дата:
14.10.04 12:25
Оценка:
Здравствуйте, Alexey Chen, Вы писали:
А>>У меня сахар такой — Singleton().DoIt(); А>>Ф-ция Singleton() возвращает Singleton::Instance(). AC>Ну я же написал, что, грубо говоря, синглтон это обьект...
У меня это больше похоже на объект, поскольку используется точка, а не ->. Дело вкуса, короче.