【问题标题】:#define include alternative for hardware cursor?#define 包括硬件光标的替代品?
【发布时间】:2013-07-18 15:52:51
【问题描述】:

我正在开发的这个程序有一个 3D(硬件/非硬件)光标选项,我正在尝试为其创建一个配置选项。现在它是使用预处理器#define 宏设置的,该宏设置CursorType、CursorName 和CursorDisplay 的类型。目前,我可以打开或关闭 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__)
  //...

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

【问题讨论】:

    标签: c++ cross-platform c-preprocessor


    【解决方案1】:

    这在定义上是不可能的,因为#define 和#include 语句总是会在编译时进行评估。

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

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

    我建议阅读Factory、Facade 和Decorator 模式。恕我直言,整个事情有点太复杂了,无法在这里为您提供代码示例(可能是我现在太懒了)。如果是这样的话。 else 得到我的意思,愿意给一个,或者有一个很好的源到这样的抽象层,随意!

    【讨论】:

    • 听起来不错。我会检查你提到的模式。
    猜你喜欢
    • 1970-01-01
    • 2011-09-10
    • 2021-08-14
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    相关资源
    最近更新 更多