gpt4 book ai didi

c++ - C++中的部分类

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:16 25 4
gpt4 key购买 nike

我想避免重新编译包含公共(public)头文件的所有内容,只是因为类定义的私有(private)部分发生了某些更改。我正在研究 PIMPL 之外的其他选项。

这是我尝试过的:

我创建了一个包含类 A 的库:

A_p.h 包含 A 类的私有(private)部分

void PrivateMethod(int i);

A.h 公共(public)头文件:

class A
{
public:
A();
virtual ~A();
// other public members
private:
#ifdef A_PRIVATE
#include "A_p.h"
#endif
};

A.cpp

#define A_PRIVATE
#include "A.h"

A::A() {}
A::~A() {}
void A::PrivateMethod(int i) { }

然后我创建了一个 Win32 控制台项目,其中包括公共(public) header (A.h) 和针对 .lib 文件的链接。

似乎一切正常,但我想知道过程中是否存在任何陷阱。谁能详细说明一下?

最佳答案

“一切似乎都正常”——似乎是必不可少的。您只是遇到未定义的行为。这是一个错误的程序 - 类定义在使用该类的编译单元中必须相同。

由于这是 UB,它似乎可以工作,但尝试在私有(private)部分中声明一个 virtual 方法,您很可能会遇到一些明显的问题。

关于c++ - C++中的部分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15930509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com