c++ - 将抽象类实现为本地类?优点和缺点

标签 c++ class local

出于某种原因,我正在考虑将某个函数(方法)中的接口(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;
}

我这样做的原因是:

  1. 我懒得在单独的文件中实现类 (B)
  2. MethodToOverride 只是将调用委托(delegate)给其他类
  3. 其他用户不应看到 B 类
  4. 无需担心删除aInst,因为在实际实现中使用了智能指针

所以我的问题是我这样做是否正确?

提前致谢!

最佳答案

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

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

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

关于c++ - 将抽象类实现为本地类?优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462845/

相关文章:

c++ - 指向静态变量的指针和指向某个变量的静态指针之间的区别

php - 使用 WAMP 2.0 在本地测试 FTP?

node.js - 本地 NPM 模块(npm 链接)部署到 Heroku

java - 将类传递给 Maven2 插件

c++ - 在重载 I/O 运算符中重载增量运算符时出错

javascript - 停止间隔有问题 [JS]

c++ - 将 unicode 字符串复制到剪贴板不起作用

c++ - 模板类错误

c++ - 本地和其他变量类型的地址存储在哪里?

javascript - 将键和原型(prototype)方法转换为驼峰式