gpt4 book ai didi

c++ - 重载。 -> 和::用于多平台类(class)

转载 作者:行者123 更新时间:2023-11-27 23:35:31 25 4
gpt4 key购买 nike

假设我有三个窗口类,一个用于我要支持的每个操作系统:

  • window
  • OSX 窗口
  • Linux 窗口

它们都继承自Window类。这也是您实例化的类。Window 类有 . -> 和::运算符过载,并根据运行的操作系统(基于 IFDEF)将 this 指针转换到相关类。

我想做的只是创建一个 Window 实例,而不知道正在运行什么操作系统。这种想法是不是很不对?沮丧到危险吗?有没有更好的方法来做到这一点?

我知道有库可以做到这一点,但我想自己尝试一下。

我想最简单的方法是创建一个工厂。但是这样的事情可以做吗?

最佳答案

您根本不能重载作用域解析运算符::。您可以重载 -> 运算符,但是当您调用该运算符时,您已经必须具有所需类型的对象。要创建您的窗口,只需使用一个简单的工厂方法:

class Window
{
public:
static Window *CreateWindow(...)
{
#ifdef _WIN32
return new Win32Window(...);
#elif defined(/** whatever is defined for Linux */)
return new X11Window(...);
#elif defined(/** whatever is defined for Mac */)
return new CocoaWindow(...);
#else
#error "Bad platform!"
#endif
}
};

关于c++ - 重载。 -> 和::用于多平台类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/523894/

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