首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从基类方法或其他建议访问派生类方法

从基类方法或其他建议访问派生类方法
EN

Stack Overflow用户
提问于 2020-04-19 18:26:45
回答 1查看 33关注 0票数 0

考虑下面的代码(我知道您可能会认为这是一个奇怪的设计。我对建设性的建议持开放态度):

代码语言:javascript
运行
复制
class Graphics
{
    // ...

public:
    template <typename Type, typename... Types>
    void draw(Type const& object, Types const&... objects)
    {
        // ...
        addToBatch(object, objects...);
        // ...
    }

protected:
    void addToBatch(Type const& object, Types const&... objects)
    {
        _addToBatch(object);
        if constexpr (sizeof...(objects) > 0)
            addToBatch(objects...);
    }

    void _addToBatch(Rect rc, Brush b);
    void _addToBatch(std::pair<Rect, Brush> rcAndBrush)
    {
        _addToBatch(rcAndBrush.first, rcAndBrush.second);
    }
    void _addToBatch(TextLayout const& tl, Brush b, Point origin);
    // ... etc
}


class SpecializedGraphics : public Graphics
{
    // ...

protected:
    // here I want to implement methods for specialized complex processing,
    // which will use _addToBatch methods from base class
    void _addToBatch(Entry const& e);
    void _addToBatch(Menu const& menu);
    // etc
}

int main()
{
    Rect rcClient;
    Brush brush;
    Entry e;
    Menu menu;
    // etc

    SpecializedGraphics gfx;
    gfx.draw(
        std::make_pair(rcClient, brush),
        e,
        menu,
        // etc
    )
    return 0;
}

这段代码给了我一个编译器错误。我想这是因为Graphics::draw是基类方法,无法访问派生类的方法。我怎样才能正确地解决这个问题?我想到的一个解决方案是简单地将draw方法的定义从基类复制/粘贴到派生类(隐藏名称)。有什么更好的建议吗?因为为什么我需要定义已经定义的内容。

EN

回答 1

Stack Overflow用户

发布于 2020-04-19 18:50:49

您可以使用uso纯虚函数,在基类中将您希望保留实现的方法的声明更改为派生类,如下所示:

代码语言:javascript
运行
复制
virtual void _addToBatch(Rect rc, Brush b) = 0;

通过这样做,该方法现在被声明为纯虚拟的,

在您的专门化类中,您现在必须定义这些函数:

代码语言:javascript
运行
复制
class SpecializedGraphics : public Graphics
{
 protected:
  void _addToBatch(Rect rc, Brush b);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61302845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档