C++ 将抽象类实现为本地类?利弊
出于某种原因,我正在考虑将某个函数(方法)中的接口实现为本地类 考虑以下几点:C++ 将抽象类实现为本地类?利弊,c++,class,local,C++,Class,Local,出于某种原因,我正在考虑将某个函数(方法)中的接口实现为本地类 考虑以下几点: class A{ public: virtual void MethodToOverride() = 0; }; A * GetPtrToAImplementation(){ class B : public A { public: B(){} ~B(){} void MethodToOverride() { /
class A{
public:
virtual void MethodToOverride() = 0;
};
A * GetPtrToAImplementation(){
class B : public A {
public:
B(){}
~B(){}
void MethodToOverride() {
//do something
}
};
return static_cast<A *>(new B());
}
int _tmain(int argc, _TCHAR* argv[])
{
A * aInst = GetPtrToAImplementation();
aInst->MethodToOverride();
delete aInst;
return 0;
}
A类{
公众:
虚空方法ToOverride()=0;
};
A*GetPtrToAImplementation(){
B类:公共A{
公众:
B(){}
~B(){}
void MethodToOverride(){
//做点什么
}
};
返回静态_cast(新的B());
}
int _tmain(int argc,_TCHAR*argv[]
{
A*aInst=GetPtrToAImplementation();
aInst->MethodToOverride();
删除aInst;
返回0;
}
我这样做的原因是:
GetPtrToAImplementation()
的实现文件的未命名命名空间中定义B
A
应具有虚拟dtor为什么您不能在
A
的实现文件中完全(非本地)定义B
?这只是一个小错误,但A应该有一个虚拟析构函数。它只是一个接口,在头文件中声明。此外,B在定义了GetPtrToAiImplementation的翻译单元之外也看不到。@sbi:看来我该休息一下了,因为我记不起未命名的名称空间:)p.s.感谢您提供的信息,因为我不知道它们不能用作模板参数!