gpt4 book ai didi

c++ - 有没有办法让两个具有不同访问权限的 getter 并在其中一个 for 循环中使用?

转载 作者:行者123 更新时间:2023-12-03 07:00:37 25 4
gpt4 key购买 nike

class Foo {
// friend Bar;

public: const std::list<int*>& numbs () const { // (1)
return mNumbs;
}

protected: std::list<int*>& numbs () { // (2)
return mNumbs;
}

private: std::list<int*> mNumbs;
};

int main () {
Foo foo;
for (const auto& e : foo.numbs()) { // (3)
// some work...
}
}
我的意图是强制为客户端使用(1)方法,为 Foo 类的 friend 使用(2)方法。
然而,编译器正试图使用​​ (2) 方法在 for 语句中 protected 并发生错误 (3):
std::__cxx11::list<int*>& Foo::numbs()’ is protected within this context
我找到了一些解决方案:
  • 更改 (2) 方法的名称(例如更改为 numbs_)。
  • 将 (2) 方法的访问类更改为 public(我对此不满意)。

  • 有人知道更好的主意吗?

    最佳答案

    方法一是 不是 foo 以来更好的匹配不是常量对象。只有当您的对象是常量时才会调用它。
    如果您的调用者选择将对象标记为 const ,只有这样错误才会消失。例如,这将按预期工作:

    const Foo foo;
    for (const auto& e : foo.numbs()) { // (3)
    // some work...
    }
    像这样设计它似乎是个坏主意。
    附带说明一下,您还需要知道 C++ 中的可见性和可访问性是不同的东西。这两种方法都是可见的,但只有一种是可访问的。并且在类型或派生类型之外无法访问更好匹配的那个。因此错误。
    P.S.:如评论中所述, const_cast<>也会达到同样的效果。

    关于c++ - 有没有办法让两个具有不同访问权限的 getter 并在其中一个 for 循环中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64214283/

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