抽象类和静态方法

Gui*_*mas 2 c++ abstract-class static-methods

我有一个抽象类:

class A
{
  public:
  bool loaded_;
  virtual int load() = 0;
}
Run Code Online (Sandbox Code Playgroud)

还有几个派生类:

class B:public A
{
  public:
  int load();
  static B& instance();
}  

class C:public A
{
  public:
  int load();
  static C& instance();
}  
Run Code Online (Sandbox Code Playgroud)

事实是:: 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_;
}
Run Code Online (Sandbox Code Playgroud)

我想对这个:: instance方法进行分解,但是假设它使用了虚方法:: load,我无法在类A中定义它.从理论上讲,我知道它很奇怪,因为类A应该有0个实例和B,C应该有1个实例,但这个代码应该分解也是有意义的.

你会如何解决这个问题?

sth*_*sth 8

你可以制作instance()一个免费的功能模板:

template<class T>
T& instance()
{
  static T instance_;
  if (!instance_.loaded_)
  {
    instance_.load();
    instance_.loaded_=true;
  }
  return instance_;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

instance<B>().do_stuff()
Run Code Online (Sandbox Code Playgroud)