我正在编写一个跨平台的类层次结构,并希望将依赖于平台的实现保留在它们自己的类中(而不是使用一个类#ifdefs
)。这是我到目前为止所拥有的,但编译器抱怨这BaseDef
是私有的。对于如何在编译它的同时保持这个基本结构的任何帮助将不胜感激:-)
编辑:从这里看来这是不可能的。还有什么其他方法可以保持这个一般结构并仍然编译吗?
根目录
class Root {
private:
class BaseDef {
virtual void foo() = 0;
virtual void bar() = 0;
};
#ifdef _WIN32
class WinImp;
#else
class NixImp;
#endif
BaseDef* imp;
BaseDef* getImp();
public:
Root() : imp(getImp()) {}
void foo();
void bar();
};
根.cpp
#include "Root.h"
void Root::foo() {
imp->foo();
}
void Root::bar() {
imp->bar();
}
WinImp.h
#ifdef _WIN32
#include "Root.h"
class WinImp : public Root::BaseDef {
public:
void foo();
void bar();
};
#endif
WinImp.cpp
#include "WinImp.h"
#ifdef _WIN32
Root::WinImp::foo() {
}
Root::WinImp::bar() {
}
Root::BaseDef* Root::getImp() {
return new Root::WinImp();
}
#endif