在 C++ 中声明一个 "interface" 并且不将其 vtable 发送到每个翻译单元
Declaring an "interface" in C++ and not emmiting its vtable to every translation unit
根据 this 的回答,在 C++ 中声明一个 class 的方法在概念上类似于接口是这样的:
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
。有没有一种正确的方法可以在项目中使用这样的接口,而不会用这些 vtable 污染每个翻译单元?
您已经有了一个非纯虚函数:析构函数!在自己的翻译单元中定义即可。
// IDemo.h
class IDemo
{
public:
virtual ~IDemo();
virtual void OverrideMe() = 0;
};
// IDemo.cpp
IDemo::~IDemo() = default;
根据 this 的回答,在 C++ 中声明一个 class 的方法在概念上类似于接口是这样的:
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
。有没有一种正确的方法可以在项目中使用这样的接口,而不会用这些 vtable 污染每个翻译单元?
您已经有了一个非纯虚函数:析构函数!在自己的翻译单元中定义即可。
// IDemo.h
class IDemo
{
public:
virtual ~IDemo();
virtual void OverrideMe() = 0;
};
// IDemo.cpp
IDemo::~IDemo() = default;