将抽象类实现为本地类?利弊

时间:2010-03-17 14:08:26

标签: c++ class local

出于某种原因,我正在考虑将某个函数(方法)中的接口实现为本地类。

请考虑以下事项:

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;
}

我这样做的原因是:

  1. 我懒于在单独的文件中实现类(B)
  2. MethodToOverride只是委托调用其他类
  3. 其他用户不应看到B类
  4. 无需担心删除aIn,因为智能指针用于实际实现
  5. 所以我的问题是,如果我这样做了吗?

    提前致谢!

1 个答案:

答案 0 :(得分:5)

  1. 您可以在实现B的实现文件的未命名命名空间中定义GetPtrToAImplementation()

  2. A应该有一个虚拟dtor。

  3. 根据当前的C ++标准,您不能将本地类用作模板参数。 (例如,这意味着您不能将它们与STL一起使用。)