This question already has answers here:
clang: no out-of-line virtual method definitions (pure abstract C++ class)

(4个答案)


1年前关闭。




根据this的回答,在C++中声明类的方法在概念上类似于接口(interface):
class IDemo
{
public:
    virtual ~IDemo() {}
    virtual void OverrideMe() = 0;
};

但是,当我这样做时,我得到警告:'IDemo' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit。是否有适当的方法在项目中使用此类接口(interface)而又不会用这些vtable污染每个翻译单元?

最佳答案

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

// IDemo.h

class IDemo
{
public:
    virtual ~IDemo();
    virtual void OverrideMe() = 0;
};
// IDemo.cpp

IDemo::~IDemo() = default;

关于c++ - 在C++中声明 “interface”,并且不将其vtable分配给每个翻译单元,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57687497/

10-10 11:20