【发布时间】:2018-02-06 14:10:42
【问题描述】:
在 C++ 中是否可以有这样的东西:
struct Foo
{
int x;
constexpr Foo(int x) : x(x) {}
static constexpr Foo table[] =
{
Foo(0),
Foo(1),
Foo(2),
};
};
我尝试了几种组合,但都没有奏效。如果 table 不是 Foo 类的一部分,它可以工作,但是我真的希望它成为 Foo 命名空间的一部分。
编辑:
我想要这个的原因是我可以以Foo::table 的身份访问该表。我在命名空间中有几个这样的类,如果我可以通过编写using someNamespace::Foo 导入我正在使用的类,然后以Foo::table 访问表,那真的很方便。如果表在课堂之外,我必须始终通过写someNamespace::fooTable 来访问它。
【问题讨论】:
-
@tobi303 不,因为表是静态的。
-
ups 很抱歉忽略了这一点
-
它无法工作,因为在解析
table时,您没有Foo的完整定义。要创建Foo的实例,您需要完整的定义,编译器必须解析整个结构直到结束。 -
@Someprogrammerdude 我知道,编译器错误解释得很好。我想没有办法实现这样的目标。我还编辑了这个问题,以解释为什么我首先想要这样的东西。
标签: c++ arrays static constexpr