扩展由接口派生的具体类的方法池

时间:2010-06-18 16:39:15

标签: c++ interface

我创建了一个接口,用于抽取部分源代码以供以后扩展。但是如果我想用一些特殊方法扩展派生类呢? 所以我在这里有界面:

class virtualFoo
{
public:
 virtual ~virtualFoo() { }

 virtual void create() = 0;
 virtual void initialize() = 0;
};

和一个带有额外方法的派生类:

class concreteFoo : public virtualFoo
{
public:
 concreteFoo() { }
 ~concreteFoo() { }

 virtual void create() { }
 virtual void initialize() { }

 void ownMethod() { }
};

所以我尝试创建一个concreteFoo实例并尝试像这样调用ownMethod

void main()
{
 virtualFoo* ptr = new concreteFoo();
 concreteFoo* ptr2 = dynamic_cast<concreteFoo*>(ptr);

 if(NULL != ptr2)
  ptr2->ownMethod();
}

它有效,但并不是优雅的方式。如果我尝试直接使用ptr->ownMethod();,编译器会抱怨此方法不属于virtualFoo。 是否有机会在不使用dynamic_cast的情况下执行此操作?

提前致谢!

1 个答案:

答案 0 :(得分:1)

这正是dynamic_cast的用途。但是,您通常可以通过更改设计来避免使用它。既然你给出了一个抽象的例子,很难判断你是否应该以不同的方式做事。