gpt4 book ai didi

c++ - 设计我的方式进入 dynamic_cast 我应该如何进行?

转载 作者:行者123 更新时间:2023-11-28 07:02:15 26 4
gpt4 key购买 nike

我正在阅读 Simple Event Handling .作者为他的事件使用了一个简单的结构,但建议:

A possible improvement here is to pass around a pointer to an Event class instead of a structure. The Event class could then contain any amount of information, and derived classes could be created for different types of events. I choose a simpler option, mainly because the scope of our project didn't require such a complex solution.

我将其实现为:

class Event
{
public:
typedef unsigned long EventType;

explicit Event(EventType type);
EventType getType() const;

private:
EventType mType;
};

class EventStr : public Event
{
public:
typedef unsigned long EventType;

EventStr(EventType type, std::string str);
std::string getString() const;

private:
std::string mString;
};

void EventDispatcher::sendEvent(const Event& event);

main()
{
Event e = EventStr(0x496bf752, "derived data");
SendEvent(e);
}

我的想法是派生类型可以有自己独特的数据(在这个例子中是一个字符串)。但是,我看到这需要在处理事件时使用 dynamic_cast 来访问 EventStr::getString。另一方面,我没有使用虚函数,因为我希望基类是准系统,并在派生类中具有特定的细节。

我的理解是 dynamic_casts 是典型的糟糕设计。那是我的危险信号。是否可以有一个基本的基类,然后向派生类添加额外的细节,同时仍然能够将派生类型作为对基类的引用传递?如果不是,作者的建议是什么?

最佳答案

如果您有不同的事件类型,则应该使用面向对象的方式来使用基本事件类和用于变体事件的派生类。使用函数成员为事件对其环境使用react的不同方式定义纯虚拟。这个想法恰恰是这样,您可以像传递基类一样传递对象。

您应该看一个很好的 C++ 教程(是的,周围有很多“面向对象编程”教程/文本,但是 OOP 语言非常不同,所以并不是所有的都有帮助)。我见过的是 cppreference 的那个, 也许是 wikibook .我敢打赌 Stroustrup 当前的 The C++ Programming Language非常详尽和清晰(从我拥有的更早的版本来看)。

关于c++ - 设计我的方式进入 dynamic_cast 我应该如何进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22268852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com