Нда. Не буду больше пользоваться словом 'шутка' и другими неоднозначными словами. Дабы не вызывать непонимания.
В общем, изветная ситуация 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();
}
Может где и было, но не встречал.