我对我的库的公共 API 中的类使用 pimpl 习惯用法,以受益于它的 ABI 稳定性等属性。在我的非公开代码中,访问 impl 对象并直接对其进行操作会很方便。
向 API 类添加 getter 以返回 impl 指针是否被认为是不好的做法?为什么?
我的库的客户端无论如何都无法使用 impl obj,因为它的接口是非公开的。另一方面,我的库内部代码现在可以在 impl obj 上进行操作。
公共.h:
class PublicClass{
struct Impl;
Impl* m_impl;
public:
Impl* getImpl();
};
Run Code Online (Sandbox Code Playgroud)
实现.h:
struct Impl{
int foo();
};
Run Code Online (Sandbox Code Playgroud)
主要.cpp:
#include "public.h"
#include "impl.h"
int main(){
PublicClass p;
auto pimpl = p.getImpl();
auto interestingVal = pimpl->foo();
}
Run Code Online (Sandbox Code Playgroud)
只是一个设计问题。