扩展类而不更改其名称

时间:2012-03-18 14:58:50

标签: c++ oop inheritance

我有一个情况:在一个解决方案中,我有两个项目。我需要扩展项目中使用的类: Foo A ,以便我可以添加项目中所需的新功能: B 而无需更改其名称。问题是:Class: Foo 已经包含(即有一个)Class: Bar 并且在两个Project中都包含Class: Goo A &项目:的即可。在Project: B 我继承Class: Goo 到Class: Goo_Ex ;但我还要扩展两个:Class: Foo 和Class: Bar 和伴侣功能。

为了更清楚 - 我可以使用以下原始方法完成此操作:

/* Project:A-Class:Foo */

class Foo
{
    .
    .
    .
# ifdef PROJECT_B
    fnExtended();
# endif
};

但这会让我的代码在Project:A。

中丢失

我能想到的一个可能的解决方案是使用继承并在项目中使用类: Foo_Global 继承 - [仅]作为类: Foo A 和继承 - [扩展]再次,项目中的类: Foo B ;同类课程:。但他们是一个更直接的解决方案..?

3 个答案:

答案 0 :(得分:1)

我认为您提出的解决方案(将当前Foo隐藏为其他类名并在两个项目中的新Foo类中继承)是您应该如何做到的。

答案 1 :(得分:0)

这是一个非常抽象的问题,如果没有更多详细信息,很难为您提供一个很好的具体解决方案。

处理这个问题的基本方法是继承。但这需要一些预先计划。这意味着当你在项目A中引用Foo时,你应该使用指针或引用。如果你创建一个Foo(并且需要来自项目A的代码,当它是项目B的一部分时创建Foo_Extended)那么你需要有一个可配置的Foo工厂,它将根据上下文创建相应类型的对象。

另一种处理方式是模板。你从来没有项目A中的代码直接引用全局Foo类。相反,它总是引用模板参数。在项目A中,模板参数将最终解析为Foo,而在项目B中,它将解析为具有所需功能的其他类。

这些是在C ++中处理此问题的两种常用方法。你使用它取决于你使用它们的上下文的细节。

答案 2 :(得分:0)

扩展课程的方法不是扩展它!只需使用一个代替合适参数的函数。

相关问题