C++ 是否有方法使用父类命名空间/类空间引用子类?

C++ 是否有方法使用父类命名空间/类空间引用子类?,c++,class,inheritance,namespaces,c++20,C++,Class,Inheritance,Namespaces,C++20,假设我有以下鼠标事件类,带有按钮事件和扩展按钮按下和按钮释放事件: namespace Event { namespace Mouse { class Button : public Event { public: inline Input::Code::Mouse get_mouse_button() const { return m_Button; }

假设我有以下
鼠标事件
类,带有
按钮
事件和扩展
按钮按下
按钮释放
事件:

namespace Event {
    namespace Mouse {
        class Button : public Event {
          public:
            inline Input::Code::Mouse get_mouse_button() const {
                return m_Button;
            }
    
            EVENT_CLASS_CATEGORY(Event_Category_Input | Event_Category_Mouse)
          protected:
            Button(Input::Code::Mouse button)
                : m_Button(button) {}
            Input::Code::Mouse m_Button;
        };
    
        class Press : public Button {
          public:
            Press(Input::Code::Mouse button) : Button(button) {}
    
            std::string to_string() const override {
                return fmt::format("Mouse Button Press: {0}", m_Button);
            }
    
            EVENT_CLASS_TYPE(Mouse_Button_Press)
        };
    
        class Release : public Button {
          public:
            Release(Input::Code::Mouse button)
                : Button(button) {}
    
            std::string to_string() const override {
                return fmt::format("Mouse Button Release: ", m_Button);
            }
    
            EVENT_CLASS_TYPE(Mouse_Button_Release)
        };
    }
}

我想用
Event::Mouse::Button::Press
Event::Mouse::Button::Release
代替
Event::Mouse::Press
Event::Mouse::Release
。我不能直接添加
名称空间按钮
来强制此行为,因为它将与已定义的
按钮
类冲突。有没有办法做到这一点?我知道我可以把它分别命名为
Button\u Press
Button\u Release
,但出于风格上的原因,我不想这样。提前谢谢!如果不可能,我就把它吸起来,用下划线。

既然你想
按下
释放
成为
事件::鼠标::按钮的一部分,我会让它们成为
事件::鼠标::按钮的一部分。这里唯一的技巧是,
Press
Release
的定义不能在
按钮
的定义中(但它们的声明必须仍然存在)

命名空间事件{
名称空间鼠标{
类按钮:公共事件{
class Press;//是的,您可以这样做

按钮
类中向前声明这些类型

这为类型提供了所需的范围

class Button : public Event {
  public:

    class Press;
    class Release;        

};
然后,在类之外可以定义它们

您必须在类之外定义它们,这样父类
按钮
就完全定义好了

class Button::Press : public Button {
public:

};

class Button::Release : public Button {
public:

};

你能编辑
按钮吗?当然,你有什么建议?如果我在同一时间得到两个相同的答案,我应该接受哪一个答案?时间不重要。只要尽你最大的努力去接受你认为最好的答案。这里没有什么不愉快的感觉。太棒了!这比我想象的要直观得多,哦!这是否有任何性能影响?它会影响类型的作用域,它没有性能影响SEXTRA+1,这是一个很好的答案。