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,这是一个很好的答案。