小编joe*_*_89的帖子

如何在不暴露内部情况的情况下与Pimpl交换私人数据?

如果你有一个对象B需要一个对象A的私有成员的副本,并且私有成员被Pimpl隐藏,那么如何在不暴露内部的情况下实现它呢?// Foo.h

class Foo
{
private :
  struct impl ;
  impl * pimpl ;
};

// Foo.cpp
struct impl { std::string data; }

//main.cpp
Foo A;
Foo B;
// I want A::pimpl->data copied to B::pimpl->data and I don't want std::string exposed in my Foo header.
Run Code Online (Sandbox Code Playgroud)

c++ pimpl-idiom

3
推荐指数
1
解决办法
335
查看次数

一种更简单的pimpl形式

为什么不选择这个设计:

// A.hpp
class A
{
public:
    void do_something();
};

// A.cpp
#include "A.hpp"
#include <vector>

std::vector<int> impl_database_for_do_something;

static void impl_helper_for_do_something(const std::vector<int>& database){}

void A::do_something(){ impl_helper_for_do_something(impl_database_for_do_something); }
Run Code Online (Sandbox Code Playgroud)

而不是这一个:

// A.hpp
#include <vector>
class A
{
public:
    void do_something();

private:
    std::vector<int> database_for_do_something_;
    void helper_for_do_something(const std::vector<int>& database){}
};
Run Code Online (Sandbox Code Playgroud)

我可以隐藏实现细节并使用源文件中定义的变量和静态函数加速编译吗?如果没有,这个设计有什么问题(除了继承)?

c++ information-hiding pimpl-idiom interface

0
推荐指数
2
解决办法
330
查看次数

标签 统计

c++ ×2

pimpl-idiom ×2

information-hiding ×1

interface ×1