关于模板类局部特化的错误:模板参数太少。

时间:2021-12-14 20:51:21
程序如下:
template<typename K, typename V = TextMapItem> class AMapCoder : public IEgfStdDecoder, public IEgfStdEncoder
{
public:
enum FieldType
    {UDT_APAIR = 1,};
typedef std::map<K, V> AMap;
public:
virtual int encode(EgfStdStream &strm, EgfStdSField &field);
virtual int decode(EgfStdStream &strm, EgfStdSField &field);
};

template<typename K, typename V> 
int AMapCoder<K, V>::decode(EgfStdStream &strm, EgfStdSField &field)
{
AMap *pv = new AMap();
typedef AMap::value_type AMapValue;  //这行的错误:模板参数太少
AMapValue* APair;
    ...
   }
我用的redhat5.3,它不支持这种特化吗?该怎么修改呢,谢谢。

3 个解决方案

#1


在AMap::value_type前面加typename试试

#2


引用 1 楼 thefirstz 的回复:
在AMap::value_type前面加typename试试

可是前面不是有typedef了吗?这句话就是定义了一个类型。如果改成typename,那不是指定了某个类型的变量吗?

我是觉得原因可能是,template<typename K, typename V = TextMapItem>中给了个默认类型。而AMap::value_type在使用时没识别出来。当然,这个纯属个人理解。

#3


引用 1 楼 thefirstz 的回复:
在AMap::value_type前面加typename试试

谢谢,这个问题按你的解答解决了。我最初理解错了,以为要将typedef 改成typename呢,自己一看,才发现,是“加”。即如下:
typedef typename std::map<K, V> AMap;

#1


在AMap::value_type前面加typename试试

#2


引用 1 楼 thefirstz 的回复:
在AMap::value_type前面加typename试试

可是前面不是有typedef了吗?这句话就是定义了一个类型。如果改成typename,那不是指定了某个类型的变量吗?

我是觉得原因可能是,template<typename K, typename V = TextMapItem>中给了个默认类型。而AMap::value_type在使用时没识别出来。当然,这个纯属个人理解。

#3


引用 1 楼 thefirstz 的回复:
在AMap::value_type前面加typename试试

谢谢,这个问题按你的解答解决了。我最初理解错了,以为要将typedef 改成typename呢,自己一看,才发现,是“加”。即如下:
typedef typename std::map<K, V> AMap;