如何在私有类成员上使用decltype?

Mik*_* T. 0 c++ typeof decltype c++11

我有一个班级有一些"毛茸茸的"私人领域.每个都有访问器功能(getter和setter).

private:
    array<double, 9>         foo;
public:
    const array<double, 9> & getFoo() const { return foo; }
    void                     setFoo(const array<double, 9> & _foo) { foo = _foo; }
Run Code Online (Sandbox Code Playgroud)

我真的希望不会有不断重复的array<double, 9>其他地方-用decltype指到外地,不管它可能是类型.

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

幸运的是,decltype(getFoo()) 几乎工作 - getFoo是公开的,必须具有相同的类型.

不幸的是,上面的"差不多"还不够好 - getFoo的类型实际上是一个参考(array<double, 9> &).

如何获取类外部代码中的实际类型,以便我可以调用setter-function:

  SOMETHING values;
  for (auto &i : values)
      i = something();
  instance.setFoo(values);
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 7

使用类型别名.

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; }
};
Run Code Online (Sandbox Code Playgroud)

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

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

Foo::array_t bar;
Run Code Online (Sandbox Code Playgroud)