gpt4 book ai didi

c++ - #define 包含硬件游标的替代方案?

转载 作者:行者123 更新时间:2023-11-30 02:53:41 25 4
gpt4 key购买 nike

我正在处理的这个程序有一个 3D(硬件/非硬件)光标选项,我正在尝试为其创建一个配置选项。现在它是使用设置 CursorType、CursorName 和 CursorDisplay 类型的预处理器 #define 宏设置的。目前,我可以打开或关闭 3D 光标的唯一方法是注释或取消注释 #define USE_3D_CURSOR 行(这非常糟糕)。

#define USE_3D_CURSOR
#if defined (USE_3D_CURSOR)
#include <osgDB/ReadFile>
#define CursorType osg::Image *
#define CursorName const stringobj&
#define CursorDisplay osg::Texture *
#elif defined (_MSC_VER)
#include <windows.h>
#include <osgViewer/api/Win32/GraphicsWindowWin32>
#define SLASH "\\"
#define CursorType HCURSOR
#define CursorName LPTSTR
#define CursorDisplay HMODULE
#elif defined(__linux__)
//...

所以正如我之前所说,我想将其更改为可以在运行前设置的配置文件选项。但是,我不确定执行此操作的最佳方法是什么。我应该使用模板函数吗?

最佳答案

这在定义上是不可能的,因为 #define#include 语句总是会在编译期间被评估。

为此你需要一种操作系统抽象层,而不是 #define CursorType

换句话说:定义抽象接口(interface)来描述游标特定行为,并为这些行为提供特定于操作系统的实现。使用工厂模式在编译时实例化正确的实现,使用接口(interface)在运行时配置特定的行为和功能。

我建议阅读有关 Factory 的内容, FacadeDecorator模式。恕我直言,整个事情有点太复杂,无法在此处为您提供代码示例(可能是我现在太懒了)。如果是这样。 else 明白我的意思,并且愿意提供一个,或者有这样一个抽象层的良好来源,请随意!

关于c++ - #define 包含硬件游标的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17728326/

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