从Const引用接口到派生类的转换
Upcast from Const Reference Interface to Derived Class
编辑:事实证明,我所说的实际上是向下转换,而不是向上转换。所以忽略我说向上投射的地方。
从const引用接口到派生类的上转换有效吗?它会引起问题吗?我会遇到我不知道的问题吗(除了向错误的对象升级之外,我不知道任何其他问题)。
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, %dn", wArgs.lParam, wArgs.wParam);
printf(buf);
}
int main()
{
WinEventArgs args; // todo: initialise
some_event(args);
return 0;
}
也许我可以使用不同的设计/方法来获得相同的结果?我应该只使用一个空指针吗(尽管这意味着我不能使它常量,这很重要,因为对象不应该改变)。
这不是向上转换,而是向下转换一个IEventArgs
)。
在任何合法的情况下,您都不会修改const
-ness。您已经有一个const
引用,并将其向下转换为特定的派生类。为什么它会引起问题?
相关文章:
- 存储模板类型以强制转换回派生<T>
- 在 C++ 中将对象转换为派生类型
- 从基类实例调用派生类方法而不进行强制转换
- 从基指针到派生的强制转换问题
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- C ++基础私有方法在将自身转换为派生类后可以访问吗?
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 为什么从基转换为派生提供此功能?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 从从该抽象类派生的 Python 对象强制转换C++抽象类C++
- 基类到派生类的强制转换向量
- 有没有办法复制派生类指针的向量而不将其强制转换为基类?
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- 如何在运行时将指向派生类的 void* 正确转换为指向基类的 void*
- C++转换派生类
- CRTP / 宏 / 避免强制转换派生类的指针
- 如何正确转换派生类