Ostatnio tylko projektowałem klasy i interfejsy mojego silniczka, teraz trzeba to wszystko wcielić w życie i pisać tysiące linii kodu, cóż takie jest już życie programisty:). Zaczynam od najprostszych elementów, czyli klas pomocniczych. Jedną z nich jest CSAllegroController - "S" w nazwie sugeruje, że jest to klasa typu singleton,
czyli może istnieć tylko jeden taki obiekt w całym silniku. Klasa jest "nakładką" na wszelki inicjalizacje i instalacje w Allegro(zawiera tablice w której będą znajdowały się informacje o bieżących zainicjowanych elementach Allegro np. czy zainstalowano obsługę klawiatury, myszki itp.). Klasa, będzie pomocna również, gdy będziemy chcieli dowiedzieć się jaki interfejsem Allegro posługuje się przy obsłudze plików(podstawowym czy PhysicsFS). CSAllegroController nie trzeba używać na zewnątrz, będzie ona używana tylko wewnątrz silnika.
Jeszcze na temat implementacji w postać singletona:
- Jest to technika programistyczna pozwalająca na to, że w naszym programie będzie istnieć tylko jeden egzemplarz naszej klasy.
- Jest to możliwe dzięki statycznemu wskaźnikowi na tę klasę, który jest w niej zawarty, a dostęp do niego uzyskujemy przez statyczną metodę która go zwraca.
#pragma once
#include
class Singleton
{
private:
// statyczny wskaźnik na klasę
static Singleton * m_Singleton;
public:
static Singleton * GetSingleton();
Singleton();
~Singleton();
};
// składowe statyczne trzeba deklarować w globalnym obszarze nazw
Singleton * Singleton::m_Singleton;
Singleton SingletonOne; // Tworzymy jedyny obiekt
Singleton.cpp
#include "Singleton.h"
Singleton::Singleton()
{
// Sprawdzamy czy nie stworzono już obiektu, czy wskaźnik jest pusty
assert(!m_Singleton);
// Jeśli tak to inicjujemy go obecnym obiektem
m_Singleton = this;
}
Singleton::~Singleton()
{
// Sprawdzamy czy obiekt istniej, czy nie jest to pusty wskaźnik
assert(m_Singleton);
// jeśli nie jest pusty to doprowadzamy go do tego stanu
m_Singleton = 0;
}
static Singleton::Singleton * GetSingleton()
{
assert(m_Singleton);
// zwracamy wskaźnik na jedyny obiekt tej klasy
return m_Singleton;
}
Edit: Słusznie ta implementacja nie jest taka dobra, ale znalazłem lepszą:
http://users.v-lo.krakow.pl/~temporal/SCGame/html/v-lo/arts/inf/singleton.html
Edit: Słusznie ta implementacja nie jest taka dobra, ale znalazłem lepszą:
http://users.v-lo.krakow.pl/~temporal/SCGame/html/v-lo/arts/inf/singleton.html