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

Problems referring to a nested type of type as argument of a class template

本文关键字:参数 问题 类型 嵌套类型 引用      更新时间:2023-10-16

我有一个类模板,它在里面定义了一个类型:

#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的成员。发生了什么事?

您需要在此处使用typename

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

糟糕的编码。另外,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;
}