Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模拟使用Pimpl模式的类_C++_Api_Mocking_Virtual_Pimpl Idiom - Fatal编程技术网

C++ 模拟使用Pimpl模式的类

C++ 模拟使用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

比方说,我创建了一个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_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_;
};