在声明之前使用静态const成员

时间:2015-10-21 15:29:36

标签: c++ static-members forward-declaration

我的问题如下:

template<typename T> 
struct A {
    T* array[B<T>::N];
};

template<typename T>
struct B {
    static const int N = 10;
    A<T> a;
}

这不能编译,因为我需要某种前向声明。我看到两个选项

  • 更改A的类声明+前向声明的顺序,以便在A中使用B的指针。我不喜欢它,因为我真的希望在A

  • 中有A*而不是B成员
  • 使N成为A的模板参数。现在我想我会选择这个,但我也不喜欢它,因此我想知道......

有没有办法让这段代码编译(如果可能的话,不改变任何类型或引入更多的模板参数)?

有很多类似的问题,但对大多数问题来说,答案就是答案:&#34;你不能向前(静态)班级成员&#34; 以下是其中一些:

forward declare static function c++

Is it possible to forward declare a static array

c++ forward declaration of a static class member

1 个答案:

答案 0 :(得分:1)

您可以稍微更改一下类以解决问题。

解决方案1:让N成为A成员

template<typename T> 
struct A {
    static const int N = 10;
    T* array[N];
};

并根据B<T>::N定义A<T>::N

template<typename T>
struct B {
    static const int N = A<T>::N;
    A<T> a;
};

解决方案2:将N另一个模板参数设为A

template<typename T, int N> 
struct A {
    T* array[N];
};

template<typename T>
struct B {
    static const int N = 10;
    A<T, N> a;
};