すべてのインスタンスのコレクションを含む一種のファクトリ クラスはどうでしょうか。
何かのようなもの:
template<typename T>
class least_one_factory
{
static std::vector<T> instances_;
public:
least_one_factory()
{
// Make sure there is an instance of `T` in our collection
instance_.push_back(T());
}
T& get()
{
return instances_.front();
}
T& get(int n)
{
return instances_.at(n);
}
T& create()
{
instances_.push_back(T());
return instances_.back();
}
int count() const
{
return instances_.size();
}
operator T&()
{
return get();
}
};
template<typename T>
std::vector<T> least_one_factory<T>::instances_;
これで、次のことができます。
struct some_class {};
least_one_factory<some_class> some_class_factory;
変数には、 の少なくとも1 つのインスタンスsome_class_factory
が含まれます。で取得できます。がグローバル変数の場合、 が呼び出される前にプログラムがロードされたときに のインスタンスが作成されます。some_class
some_class_factory.get()
some_class_factory
some_class
main