如何在 C++ 中使用前向声明模板 class 声明模板 class 对象的外部数组?

How to declare an extern array of template class objects with a forward declared template class in C++?

考虑以下现有代码(按预期编译和执行):

/* File foo.h */

extern const struct Foo bar[]; /* Definition in foo.cpp */

struct Foo
{
    Foo(int i) : Foo(bar[i]) {}
    int x;
};

我现在想将 Foo 更改为模板 class,这样:

template <typename T>
struct Foo
{
    Foo(int i) : Foo(bar[i]) {}
    T x;
};

我现在需要如何声明 extern const struct Foo bar[] 才能编译代码?

  • 首先,前向声明template <typename T> struct Foo.
  • 然后,使用前向声明的 Foo 声明 bar

template <typename T>
struct Foo;

extern const Foo<int> bar[];

template <typename T>
struct Foo
{
    Foo(int i) : Foo(bar[i]) {}
    T x;
};