У меня есть абстрактный класс:
class A
{
public:
bool loaded_;
virtual int load() = 0;
}
И несколько производных классов:
class B:public A
{
public:
int load();
static B& instance();
}
class C:public A
{
public:
int load();
static C& instance();
}
Дело в том, что код внутри методов :: instance () одинаков для каждого класса:
static B& B::instance()
{
static B instance_;
if (!instance_.loaded_)
{
instance_.load();
instance_.loaded_=true;
}
return instance_;
}
static C& C::instance()
{
static C instance_;
if (!instance_.loaded_)
{
instance_.load();
instance_.loaded_=true;
}
return instance_;
}
Я хотел бы разложить этот метод :: instance, но, учитывая, что он использует виртуальный метод :: load, я не могу определить его в классе A.
Теоретически, я знаю, что это странно, так как класс A должен иметь 0 экземпляров, а B, C должен иметь 1 экземпляр, но также имеет смысл, что этот код должен быть разложен.
Как бы вы решили эту проблему?