将类型的嵌套类型引用为类模板的参数的问题
Problems referring to a nested type of type as argument of a class template
我有一个类模板,它在里面定义了一个类型:
#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;
}
相关文章:
- C++复杂情况的比较器通过参数问题
- C++17 中的歧义错误(模板模板参数和默认参数问题)
- C 缺少模板参数问题
- C++ pcap_loop() 参数问题
- 带有指针作为参数问题的 C++ 函数
- C++ 奇怪的字符*参数问题(不兼容的类型)
- JNA 参数问题:内存访问无效
- Qt样式表和"一个参数"问题
- 默认参数问题 (c++)
- 具有可变模板的递归继承和继承参数问题
- 命令行参数问题
- OpenCV 决策树参数问题
- winapi GetProcessMemoryInfo 无效参数问题
- 参数问题?至少我认为是这样
- 构造函数参数问题C++
- c++教程参考参数问题
- c++多线程参数问题
- Clang Format多行函数声明参数问题
- 提升Python - 具有默认参数问题的重载函数
- VBA Excel DLL参数问题-第6个参数