微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用模板将多态类重写为一个类编译时多态

如何解决使用模板将多态类重写为一个类编译时多态

在我当前的代码中,我使用运行时多态从 LightBase 类创建不同的“光”子类型。然而,光类型在编译时就已经知道了(预处理器会选择正确的变体)。所以我认为它真的不是正确的工具,因为它很慢(虚拟 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 中编译。有什么想法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。