【发布时间】:2013-01-25 02:22:51
【问题描述】:
我正在编写一个跨平台的类层次结构,并希望将依赖于平台的实现保留在它们自己的类中(而不是拥有一个具有#ifdefs 的类)。这是我到目前为止所拥有的,但编译器抱怨BaseDef 是私有的。对于如何在编译它的同时保持这个基本结构的任何帮助将不胜感激:-)
编辑:从here 看来这是不可能的。还有什么其他方法可以保持这个一般结构并仍然编译吗?
根.h
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
【问题讨论】:
-
确认...使用单例实例作为具有静态成员的命名空间...更好地使用命名空间。
-
@Potatoswatter 这已将我的所有代码都从其中剥离(显然:-))....实际上它不能是命名空间
标签: c++ oop inheritance nested-class