2016-04-25 38 views
1

我正在为Boost无序映射容器编写包装器方法。在我的封装器中,我试图编写一个模板化封装器。对于下面提到的代码,我在VS 2010中收到了编译错误,如下所示。蚂蚁一个帮助请求。在unordered_map中插入模板值时出错提升

template< class Tkey, class Tvalue> 
class CHashMap 
{ 
    unordered_map<Tkey, Tvalue> m_HashMap; 
}; 

template< class Tkey, class Tvalue> 
unordered_map::iterator CHashMap<Tkey, Tvalue>::SetAt(Tkey, Tvalue) 
{ 
    m_HashMap.insert(std::make_pair(Tkey, Tvalue)); 
} 

void main() 
{ 
    CHashMap<std::string, std::string> m_mymap; 
    m_mymap.SetAt("1","Some value"); 
} 

错误C2275:'Tkey'非法使用此类型作为表达式。

错误C2275:'TValue'非法使用此类型作为表达式。

此外,我想知道一个MOER件事,

是它更好地使用模板作为参数传递给unordered_map或升压::任何。

回答

1

你错过了名的参数 - 您当前只使用类型:

template <class Tkey, class Tvalue> 
unordered_map::iterator CHashMap<Tkey, Tvalue>::SetAt(Tkey key, Tvalue value) 
//              ^^^^  ^^^^^^ 
{ 
    m_HashMap.insert(std::make_pair(key, value)); 
//         ^^^ ^^^^^ 
}