任何人都知道是否有可能在C++上有部分类定义?C++上的部分类定义?
喜欢的东西:
file1.h:
class Test { public: int test1(); };
file2.h:
class Test { public: int test2(); };
对于我来说,似乎是definining具有之间的共同功能的多平台类非常有用他们是独立于平台的,因为继承是一种对多平台类无用的支付成本。
我的意思是说,在编译时你永远不会有两个多平台的专门实例。继承对于满足公共接口需求可能很有用,但在此之后它不会在运行时添加任何有用的东西,只是成本。
而且你将不得不使用一个丑陋的#ifdef使用类,因为你不能从抽象类做一个实例:
class genericTest { public: int genericMethod(); };
然后假设为Win32:
class win32Test: public genericTest { public: int win32Method(); };
也许:
class macTest: public genericTest { public: int macMethod(); };
我们认为无论win32Method()和macMethod()调用genericMethod() ,你将不得不使用类是这样的:
#ifdef _WIN32 genericTest *test = new win32Test(); #elif MAC genericTest *test = new macTest(); #endif test->genericMethod();
现在想了一会儿继承只是给他们有用既是genericMethod(),它是依赖于特定于平台的一个,但你有因此调用两个构造函数的代价。你也有围绕代码散布的丑陋#ifdef。
这就是我寻找部分类的原因。我可以在编译时定义具体的平台依赖的部分结束,当然,在这个愚蠢的例子中,我仍然需要一个丑陋的#ifdef在genericMethod()中,但是还有其他方法可以避免这种情况。
首先,非虚函数都是不收取“费用”和第二,如果你的代码不表明哪个版本你正在使用的界面,在一个版本上工作会打破其他版本,例如当你做test-> win32Method()。平台特定的类不一样,并且应该有不同的名字。 – Jamie 2008-09-28 22:03:39
您可以使用工厂方法来最小化#ifdefs。你可以使用模板(http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern)来进一步减少它。 – Jamie 2008-09-28 22:06:50
C++是如此老式和可怜的语言(( – 2015-09-15 07:18:16