gpt4 book ai didi

c++ - 禁止在类中使用方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:11 24 4
gpt4 key购买 nike

我有一个类,它有访问器方法,可以在类外使用,以查看它的一些私有(private)数据。

但是,类的内部方法不应使用这些公共(public)访问器,因为类的内部状态会被其其他方法更改,并且这些更改在计算完成之前不会写入公共(public)访问器查看的位置。

是否有一种编译时方法可以防止类调用它自己的一个或多个成员?或者,使用 assert 的运行时检查也很好,因为它可以很容易地从发布编译中删除。

最佳答案

虽然我在实践中从未见过这种模式,但您可以将实现和接口(interface)分开(尽管通常是相反的方式)

namespace detail {
class Impl {
protected:
Impl() : x_(0) {}

int x_;
void internal() { x_ = 1; }
void something_else() { x_ = 2; }
};
}

class Interface : public detail::Impl {
public:
int x() const { return x_; }
void x(int x) { x_ = x; }
};

或者不推导更进一步:

class Interface;

namespace detail {
class Impl {
private:
friend class ::Interface;
Impl() : x_(0) {}

int x_;
void internal() { x_ = 1; }
void something_else() { x_ = 2; }
};
}

class Interface {
public:
int x() const { return impl_.x_; }
void x(int x) { impl_.x_ = x; }
private:
Impl impl_;
};

另请参阅 PIMPL 习语,它通常用于减少 header /库/客户端耦合并增加编译时间。

关于c++ - 禁止在类中使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14537059/

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