在C ++中声明“接口”,并且不将其vtable传递给每个翻译单元

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污染每个翻译单元?

Que*_*tin 6

您已经具有一个非纯虚函数:析构函数!只需在其自己的翻译单元中进行定义即可。

// 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)