我有一个类有一些“毛茸茸的”私有(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/