使用指向彼此的指针初始化const结构实例

kwc*_*kwc 3 c++ struct pointers

在C++程序中,我有一个结构,其中包含指向其自己类型的另一个实例的指针:

struct Foo
{
  const Foo* ptr;
};
Run Code Online (Sandbox Code Playgroud)

我想声明并初始化这个结构的两个const实例,它们指向彼此:

const Foo f1 = {&f2};
const Foo f2 = {&f1};
Run Code Online (Sandbox Code Playgroud)

但是,这会导致编译时错误error: 'f2' was not declared in this scope(显然因为f1在f1之后声明,即使f1的声明引用它).

我正在努力做到可能和合理吗?如果是,我该如何使它工作?

一种解决方法可能是避免使f1 const,然后在声明f2之后重新分配指针f1.ptr = &f2;,但是如果可以的话我宁愿避免这种情况.

Che*_*Alf 6

在命名空间范围,你可以做例如

namespace my_constants {
    extern Foo const f1;
    extern Foo const f2;

    Foo const f1 { &f2 };
    Foo const f2 { &f1 };
}  // namespace my_constants
Run Code Online (Sandbox Code Playgroud)

我可以看到任何非常好的本地范围解决方案,但你原则上可以这样做

auto hack = []( Foo const* pfoo ) -> Foo const&
{
    static Foo const other = {pfoo};
    return other;
};

static Foo const    f1{ &hack( &f1 ) };
Foo const&          f2 = hack( 0 );
Run Code Online (Sandbox Code Playgroud)