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

时间:2015-02-05 05:26:37

标签: c++ templates extern forward-declaration

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

/* File foo.h */

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

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

我现在想将Foo更改为模板类,例如:

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

我现在如何声明extern const struct Foo bar[]以便代码编译?

1 个答案:

答案 0 :(得分:1)

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

template <typename T>
struct Foo;

extern const Foo<int> bar[];

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