如果你有一个对象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) 为什么不选择这个设计:
// 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)
我可以隐藏实现细节并使用源文件中定义的变量和静态函数加速编译吗?如果没有,这个设计有什么问题(除了继承)?