0

在我当前的代码中,我使用运行时多态性从 LightBase 类创建不同的“光”子类型。然而,lighttypes 在编译时是已知的(预处理器选择正确的变体)。所以我认为它确实不是正确的工具,因为它很慢(虚拟 getter 函数的 vtable 查找)并且可以在编译时完成。我只是不知道如何...可以用模板完成吗?我在模板编程方面没有太多经验,所以我不知道有什么可能。

本质上,我想实例化一个 NormalLight 或 SpecialLight 类型的子类,它们具有与 LightBase 相同的功能,但对一组不同的常量进行操作:

class Color
{
    Color(std::string color_name) : color_name_(color_name) { }
    private:
        std::string color_name_;
}

class LightBase {
    public:
        std::unique_ptr& GetInstance() { return instance_; }

    protected:
        const resolution;
        std::array<Color, 0> = {  };
    // ..

    private:
        static std::unique_ptr<LightBase> instance_;
}

class NormalLight : public LightBase
{
    protected:
        const resolution = 9;
        std::array<Color, 3> { Color("blue"), Color("red"), Color("purple") };
    // ..
}

class SpecialLight : public LightBase
{
    protected:
        const resolution = 13;
        std::array<Color, 3> { Color("yellow"), Color("magenta"), Color("orange") };
    // ..
}

#if defined CONFIG_LIGHT_TYPE_NORMAL
std::unique_ptr<LightBase> LightBase::instance_ = std::unique_ptr<NormalLight>(new NormalLight());
#elif defined CONFIG_LIGHT_TYPE_SPECIAL
std::unique_ptr<LightBase> LightBase::instance_ = std::unique_ptr<SpecialLight>(new SpecialLight());
#endif

在一个函数中,我可以有条件地检查模板参数(我猜),但它是一个类定义。此外,这个东西应该在 C++11 中编译。有任何想法吗?

4

0 回答 0