/** * @file * デザインパターンSingletonインターフェースを記述する。 */ #pragma once //----------------------------------------------------------- namespace apcl { namespace interface { /** * デザインパターンSingletonインターフェース。 *
* 正確なsingletonではないのであしからず。 * public継承して使う。 * 継承するクラスはデフォルトコンストラクタを持つ必要がある。 * インスタンスにアクセスする場合、クラス名::instance()でアクセスする。 * Singletonを継承したクラスを継承するのは推奨しない。 * * 例:正確でないSingleton * @code * class A : public ::apcl::interface::Singleton * { * public: * void print(); * }; * * void func() * { * A::instance().print(); * } * @endcode * * 例:正確なSingleton * @code * class A : public ::apcl::interface::Singleton * { * friend ::apcl::interface::Singleton; * public: * void print(); * private: * A(); * }; * * void func() * { * A::instance().print(); * } * @endcode * **/ template< typename T > class Singleton { public: /// インスタンスを取得する。 static T& instance() { static T instance_; return instance_; } protected: /// 生成・破棄 //@{ Singleton() { } virtual ~Singleton() { } //@} }; }} // end of namespace ::apcl::interface //----------------------------------------------------------- // EOF