众所周知,某些语言具有接口(interface)的概念。这是Java:

public interface Testable {
  void test();
}

如何在C++(或C++ 11)中以最紧凑的方式并且几乎没有代码噪音地实现这一目标?我非常感谢不需要单独定义的解决方案(只要 header 足够)。这是一种非常简单的方法,即使我也发现了 buggy ;-)
class Testable {
public:
  virtual void test() = 0;
protected:
  Testable();
  Testable(const Testable& that);
  Testable& operator= (const Testable& that);
  virtual ~Testable();
}

这仅仅是个开始..而且我想要的已经更长了。如何改善呢?也许在std namespace 中的某个地方为此专门创建了一个基类?

最佳答案

关于什么:

class Testable
{
public:
    virtual ~Testable() { }
    virtual void test() = 0;
}

在C++中,这对子类的可复制性没有任何影响。这说明 child 必须实现test(这正是您想要的接口(interface))。您无法实例化此类,因此您不必担心任何隐式构造函数,因为它们永远都不能直接作为父接口(interface)类型调用。

如果您希望强制子类实现析构函数,则也可以将其构造为纯析构函数(但仍必须在接口(interface)中实现它)。

还要注意,如果不需要多态销毁,则可以选择使析构函数受非虚拟保护。

09-30 15:38