[使用avr-gcc / Arduino C ++编译器!]
假设我有一个Array模板类,其中T是数组中项目的类型。
template<class T, const unsigned char MaxItems>
class Array
{
public:
typedef T ItemT;
....
}
我想在其他类中使用那个类型T,比如说一个Collection类,就像这样
template<typename ArrayT>
class Collection
{
public:
Collection(ArrayT& array)
: _array(array), _count(0)
{ }
void Add(ArrayT::ItemT item) { ... }
...
}
并像这样使用它:
Array<int, 5> array;
Collection<Array<int, 5> > collection(array);
因为我不想在Collection上为Array中使用的相同ItemT添加额外的模板参数。
显然使用这样的typedef不起作用:
警告C4346:'ArrayT :: ItemT':从属名称不是带有'typename'的类型前缀来表示类型
和
错误C2061:语法错误:标识符'ItemT'
这可能吗?