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)
使用类型别名.
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)
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |