Gli*_*nka 3 c++ inheritance abstract-class interface pure-virtual
根据此答案,在C ++中从概念上类似于接口的方式声明类的方法如下:
class IDemo
{
public:
virtual ~IDemo() {}
virtual void OverrideMe() = 0;
};
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,会收到警告:'IDemo' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit。是否有适当的方法在项目中使用此类接口而不用这些vtable污染每个翻译单元?
您已经具有一个非纯虚函数:析构函数!只需在其自己的翻译单元中进行定义即可。
// IDemo.h
class IDemo
{
public:
virtual ~IDemo();
virtual void OverrideMe() = 0;
};
Run Code Online (Sandbox Code Playgroud)
// IDemo.cpp
IDemo::~IDemo() = default;
Run Code Online (Sandbox Code Playgroud)