初始化 class 的静态成员,它本身就是 subclass 中的 class

Initialize static member of class which is itself a class in subclass

我有两个 class,其中一个是另一个的子class。 classes 被布置为单例。所以基础 class 包含一个静态成员,它被设置为 class 的唯一实例并且可以被 getter 函数引用(这里不相关,所以我把它省略了) .我现在想在全局上下文中创建 subclass 并将实例保存到静态成员变量。这基本上就是我所拥有的:

class LightBase
{
    protected:
        static LightBase instance_;
    // .. stuff
}

class NormalLight0_5 : public LightBase
{
    //.. other stuff
}

class NormalLight1_0 : public LightBase
{
    //.. other stuff
}

#ifdef CONFIG_LIGHT_TYPE_NORMAL0_5
NormalLight0_5 LightBase::instance_();  // <-- my attempt to instantiate a light of type 0.5
#elif
NormalLight1_0 LightBase::instance_();  // <-- my attempt to instantiate a light of type 1.0
#endif

但我收到以下错误:

error: no declaration matches 'NormalLight1_0 LightBase::instance_()'

这是什么原因?

您需要多态性的指针或引用。 LightBase 成员只能存储 LightBase 而不是其子类之一。因此,问题并不是真正的定义,而是您的声明已经关闭。在任何情况下,定义都必须与声明相匹配。

您可以使用 std::unique_ptr:

#include <memory>

class LightBase {
    protected:
        static std::unique_ptr<LightBase> instance_;
};

class NormalLight1_0 : public LightBase {};

std::unique_ptr<LightBase> LightBase::instance_ = std::make_unique<NormalLight1_0>();