引用嵌套类型作为类模板参数的问题

时间:2013-09-04 11:03:22

标签: c++ g++

我有一个类模板,用于定义其中的类型:

#include <boost/array.hpp>

template <typename T, int N>
class MyFunct {
public:
  typedef boost::array<T,N> FArray;
  MyFunct();
};

现在我有另一个类模板。使这个类特别的是,它应该只适用于在其中定义名为FArray的类型的类型。请不要问为什么,这是有原因的。

template <typename F>
class MyClass {
public:
  MyClass() {
    F::FArray a = F::FArray();
  }
};

我用这个:

int main(int argc, char** argv) {
  MyClass< MyFunct<double,10> > m;
}

当我遇到这种情况时,编译器会生气地告诉我double没有名为FArray的成员。发生了什么事?

2 个答案:

答案 0 :(得分:2)

您需要在此处使用typename

typename F::FArray a = typename F::Array();

答案 1 :(得分:1)

邋coding的编码。另外,g ++ 4.7明确说明:

  

test.cpp:14:9:错误:在'F :: FArray'之前需要'typename',因为'F'是一个依赖范围

以下编译好。

#include <boost/array.hpp>

template <typename T, int N>
class MyFunct {
    public:
          typedef boost::array<T,N> FArray;
              MyFunct();
};

template <typename F>
class MyClass {
    public:
        MyClass() {
            typename F::FArray a = typename F::FArray();
        }
};

int main(int argc, char** argv) {
      MyClass< MyFunct<double, 2> > m;
}