出于某种原因,我正在考虑将某个函数(方法)中的接口(interface)实现为本地类。
考虑以下内容:
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;
}
我这样做的原因是:
- 我懒得在单独的文件中实现类 (B)
- MethodToOverride 只是将调用委托(delegate)给其他类
- 其他用户不应看到 B 类
- 无需担心删除aInst,因为在实际实现中使用了智能指针
所以我的问题是我这样做是否正确?
提前致谢!
最佳答案
您可以在实现
GetPtrToAImplementation()
的实现文件的未命名命名空间中定义B
。A
应该有一个虚拟 dtor。根据当前的 C++ 标准,您不能将本地类用作模板参数。 (这意味着您不能将它们与 STL 一起使用,例如。)
关于c++ - 将抽象类实现为本地类?优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462845/