首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对私人班级成员使用解密?

如何对私人班级成员使用解密?
EN

Stack Overflow用户
提问于 2018-09-06 19:25:37
回答 3查看 920关注 0票数 1

我有一堂课,有一些“毛茸茸的”私人领域。每个函数都有访问函数(getter和setter)。

代码语言:javascript
复制
private:
    array<double, 9>         foo;
public:
    const array<double, 9> & getFoo() const { return foo; }
    void                     setFoo(const array<double, 9> & _foo) { foo = _foo; }

我真的不想在其他地方重复array<double, 9> --使用decltype来引用字段的类型,不管它是什么。

不幸的是,简单地调用decltype(instance.foo)并不能在类之外工作,因为foo是私有的。

幸运的是,decltype(getFoo())几乎可以工作-- getFoo是公共的,必须具有相同的类型。

不幸的是,上面的“几乎”不够好-- getFoo的类型实际上是一个引用(array<double, 9> &)。

如何获得类外部代码中的实际类型,以便调用setter-函数:

代码语言:javascript
复制
  SOMETHING values;
  for (auto &i : values)
      i = something();
  instance.setFoo(values);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-06 19:52:46

您可以在类型修饰符中使用decltype

代码语言:javascript
复制
std::decay_t<decltype(instance.getFoo())> values; // std::array<double, 9>
for (auto &i : values)
    i = something();
instance.setFoo(values);
票数 3
EN

Stack Overflow用户

发布于 2018-09-06 19:30:32

使用类型别名

代码语言:javascript
复制
class Foo
{
    public:
        using array_t =          std::array<double, 9>; 
    private:
        array_t                  foo;
    public:
        const array_t  &         getFoo() const { return foo; }
        void                     setFoo(const array_t & _foo) { foo = _foo; }
};

允许您将类型提供给用户,并允许您不必键入std::array<double, 9>。您还可以在一个地方更改类型的好处。

在外部代码中,您可以声明一个类成员类型的变量,如

代码语言:javascript
复制
Foo::array_t bar;
票数 6
EN

Stack Overflow用户

发布于 2018-09-06 19:31:23

代码中几乎没有上下文,但通常您只需根据它们的含义来命名事物,例如:

代码语言:javascript
复制
struct my_image {
    typedef std::array<int,900> raw_image_t;
    const raw_image_t& get_raw(){ return data;}
private:
    raw_image_t data;
};

现在用户可以写

代码语言:javascript
复制
my_image::raw_image_t x = f.get_raw();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52210929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档