gpt4 book ai didi

c++ - 从 Const 引用接口(interface)向上转换到派生类

转载 作者:行者123 更新时间:2023-11-30 05:28:45 26 4
gpt4 key购买 nike

编辑: 结果证明我所说的实际上是一个向下转换而不是向上转换。所以请忽略我说的upcast。

从 const 引用接口(interface)向上转换到派生类是否有效,它会导致问题吗?我会遇到我不知道的问题吗(除了向上转换到错误的对象我不知道任何其他问题)。

struct IEventArgs
{

};

// Used in Win32 application
struct WinEventArgs : public IEventArgs
{
HWND hwnd;
LPARAM lParam;
WPARAM wParam;
};

// Used in POSIX application
struct PosixEventArgs : public IEventArgs
{
// ..
};

void some_event(const IEventArgs& args)
{
// I know/expect a WinEventArgs so I will upcast it
const WinEventArgs& wArgs = (const WinEventArgs&)args;

char buf[255];
sprintf(buf, "Cast ok: %d, %d\n", wArgs.lParam, wArgs.wParam);
printf(buf);
}

int main()
{
WinEventArgs args; // todo: initialise
some_event(args);
return 0;
}

也许我可以使用不同的设计/方法来实现相同的结果?我是否应该只使用一个 void 指针(尽管这意味着我不能将其设为 const,这非常重要,因为对象不应更改)。

最佳答案

这不是一个upcast,它是一个downcast,因为你正在向下进入层次结构(实际上upcasts是隐式的,因为WinEventArgs 是一个 IEventArgs)。

在任何合法的情况下,您都没有修改 const-ness。您已经有一个 const 引用并将其向下转换为特定的派生类。为什么它会引起问题?

关于c++ - 从 Const 引用接口(interface)向上转换到派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36659268/

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