gpt4 book ai didi

c++ - PIMPL成语解释

转载 作者:行者123 更新时间:2023-11-30 01:35:35 25 4
gpt4 key购买 nike

<分区>

在尝试从头文件中删除所有实现细节时,我决定使用并试用 PIMPL 惯用语。大多数(如果不是全部)示例,例如cppreference ,我已经看到使用间接级别,这是除了封装之外我无法理解的原因。这些示例总是带有这种 flavor 模式。

典型

//A.hpp
class A
{
public:
A(int);
//More non-static class methods
void set(int);

private:
struct a_impl;
std::unique_ptr<struct a_impl> pimpl;
};

//A.cpp
struct A::a_impl
{
private:
int i;
public:
a_impl(int i) : i{i}{}
//More non-static implementation class methods
void set(int i) {this->i = i;}
};
A::A(int i) : std::make_unique<struct a_impl>(i) {}
A::set(int i) {pimpl->set(i);} //????
A:://More indirect calls to non-static member functions through pointer

在某些时候,我开始想知道如果我们谈论的是实现,为什么我需要所有这些级别的复杂性和间接性。为什么不用所有这些间接调用的最简单的东西。

为什么不呢?

    //A.hpp
class A
{
public:
A(int);
//.....
void set(int);

private:
struct a_impl;
std::unique_ptr<struct a_impl> pimpl;
};

//A.cpp
struct A::a_impl
{
int i;
}

A::A(int i) : std::make_unique<struct a_impl>() { pimpl->i = i; }
A::set(int i) { pimpl->i = i; } //!!!!

我想澄清的是:

1 - 所有这些样本是否以这种方式呈现只是为了教育和良好的封装实践?

2-除了问题 1 之外,还有什么其他充分的理由让我想不到要添加这种级别的复杂性和开销吗?

3-或者我提出的替代方案不是 PIMPL 习语?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com