c++ - 如何在私有(private)类成员上使用 decltype?

标签 c++ c++11 typeof decltype

我有一个类有一些“毛茸茸的”私有(private)领域。每个都有访问器函数(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; }

我真的很想必须不断重复 array<double, 9>别处——使用decltype引用字段的类型,无论它是什么。

不幸的是,只需调用 decltype(instance.foo)不在课外工作,因为foo是私有(private)的。

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

不幸的是,上面的“差不多”还不够好——getFoo的类型实际上是引用 ( array<double, 9> & )。

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

  SOMETHING values;
  for (auto &i : values)
      i = something();
  instance.setFoo(values);

最佳答案

使用 type alias .

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> .您还可以获得仅在一处更改类型的好处。

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

Foo::array_t bar;

关于c++ - 如何在私有(private)类成员上使用 decltype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52210929/

相关文章:

javascript - 为什么 typeof 函数返回 "function"?

c++ - 实现观察者模式 C++

c++ - 引用能够引用不同的对象(不在迭代/循环体中)

c++ - 以 STD 方式对两个系列求和

c++ - =delete 函数的继承

c++ - C++03 中缺少 typeof 运算符?

c++ - 如何在一个 vs2008 项目中将库与 __stdcall 和 __cdecl 结合起来

c++ - Float 到 std::string 的转换和本地化

c++ - 修改参数的函数的完美返回

c - 在输入验证中使用 __typeof__