简单的方法是规划出一些元接口,在整个程序中使用它,并根据平台编译相同的类的不同文件,但我觉得肯定有更优雅的方法;至少,不会混淆IntelliSense等工具的方法会更好。
我看了一下wxWidgets源代码中的一些较小类,它们使用一种私有成员保存类的数据的方法,例如
class Foo
{
public:
Foo();
void Bar();
private:
FooData data;
};
您可以根据平台选择不同的实现文件来编译它。但我认为这种方法相当笨拙。
另一种方法是编写接口,并根据平台交换从该接口继承的类。大致如下:
class Foo
{
public:
virtual ~Foo() {};
virtual void Bar() = 0;
};
class Win32Foo
{
public:
Win32Foo();
~Win32Foo();
void Bar();
};
当然,这样做会破坏实际实例化的过程,因为您不知道要创建哪个实现对象,但可以通过使用函数来解决这个问题。
Foo* CreateFoo();
根据你所运行的平台来改变函数实现的方法。我也不太喜欢这种方法,因为它仍然需要在代码中添加许多实例化方法(而且这也与创建非跨平台对象的方法不一致)。
这两种方法哪个更好?有更好的方法吗?
编辑:澄清一下,我的问题不是"如何编写跨平台的C++代码?"而是"在C++中使用类抽象掉跨平台代码的最佳方法,同时尽可能保留类型系统的好处是什么?"