C++ 模拟使用Pimpl模式的类
比方说,我创建了一个libFoo库,它公开了这个类的一个APIC++ 模拟使用Pimpl模式的类,c++,api,mocking,virtual,pimpl-idiom,C++,Api,Mocking,Virtual,Pimpl Idiom,比方说,我创建了一个libFoo库,它公开了这个类的一个API class Book { public: Book(string const& title, string const& author); string const& title() const; string const& author() const; private: struct Implementation; std::shared
class Book
{
public:
Book(string const& title, string const& author);
string const& title() const;
string const& author() const;
private:
struct Implementation;
std::shared_ptr<Implementation> impl_;
};
Pimpl完全是关于实现的,它根本不影响接口 Mocking是关于保留接口和交换实现 没有重叠。对于模拟,如何实现要模拟的类没有任何区别
您可以尝试做一些有趣的事情,比如将
实现
类虚拟化。这对于维护开发人员来说是非常令人惊讶和意外的,因此我强烈建议不要这样做。对待PIPML类就像其他类一样。“如果我选择虚拟化和piml”,“GoCHAAS”在等待什么?“我看不到任何东西。我根本不建议C++中基于继承的嘲弄,因为有太多的范围,有人缺少某个引用,而无效对象从隐式拷贝中跳出来。pImpl类在这方面更安全,因为指针转换可能会失败。那么,结论是什么?我仍然不明白被接受的答案实际上是如何解释“如何模拟使用pImpl习语的类”的@凯勒,你还推荐什么样的嘲弄技巧?
class Book
{
public:
Book(string const& title, string const& author);
virtual string const& title() const;
virtual string const& author() const;
private:
struct Implementation;
std::shared_ptr<Implementation> impl_;
};