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
可是前面不是有typedef了吗?这句话就是定义了一个类型。如果改成typename,那不是指定了某个类型的变量吗?
我是觉得原因可能是,template<typename K, typename V = TextMapItem>中给了个默认类型。而AMap::value_type在使用时没识别出来。当然,这个纯属个人理解。
#3
谢谢,这个问题按你的解答解决了。我最初理解错了,以为要将typedef 改成typename呢,自己一看,才发现,是“加”。即如下:
typedef typename std::map<K, V> AMap;
#1
在AMap::value_type前面加typename试试
#2
可是前面不是有typedef了吗?这句话就是定义了一个类型。如果改成typename,那不是指定了某个类型的变量吗?
我是觉得原因可能是,template<typename K, typename V = TextMapItem>中给了个默认类型。而AMap::value_type在使用时没识别出来。当然,这个纯属个人理解。
#3
谢谢,这个问题按你的解答解决了。我最初理解错了,以为要将typedef 改成typename呢,自己一看,才发现,是“加”。即如下:
typedef typename std::map<K, V> AMap;