c++ - 在 C++ 中声明 "interface"并且不将其 vtable 发送到每个翻译单元

标签 c++ inheritance interface abstract-class pure-virtual

<分区>

根据 this回答,在概念上类似于接口(interface)的 C++ 中声明类的方式是这样的:

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

但是当我这样做时,我收到警告:'IDemo' 没有外联虚方法定义;它的 vtable 将在每个翻译单元中发出。是否有一种正确的方法可以在项目中使用此类接口(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/

相关文章:

c# - 设置在具体类的接口(interface)中定义的只读属性

C++ - 使用带函数的模板时出现错误 'undefined reference'

c++ - 同名虚成员函数的继承

java - Spring in Action 第 4 版中 JPA 存储库示例的问题

c++ - C++继承中,派生类如何禁用基类的某些元素(数据或函数)?

c++ - 使用简单指针链接函数

python - 为抽象函数指定退出函数

c++ - 创建函数变量 vector 时出现 "No matching function for call"错误

c++ - DeleteTimerQueueTimer() 访问冲突和/或死锁

c++ - C++ 库和框架如何添加标准库中没有的功能?