我正在为Boost无序地图容器编写包装器方法。在boost Unordered Map中有一个方法begin(), 它将迭代器返回给第一个元素。在我的包装中,我试着写一个模板化的包装器。例如
template< class Tkey, class Tvalue>
class CMyUnorderedMap
{
boost::Unordered_map<TKey, TValue> m_myMap;
public:
boost::unordered_map<TKey, TValue>::iterator Begin();
};
template< class Tkey, class Tvalue>
boost::unordered_map<TKey, TValue>::iterator CMyUnorderedMap< TKey, TValue >::Begin()
{
return m_myMap.begin()
}
在编译上面的代码时(使用模板参数)我在VS 2010中遇到编译错误,如下所示。
warningc4346:boost :: unordered :: unordered_map&lt; TKey,TValue&gt; :: iterator:依赖名称不是类型。
错误C3860模板参数列表下面的类模板名称必须按照tempate参数列表中使用的顺序列出参数
但是,如果我使用模板参数编译代码,则代码符合。 例如,如果下面的指定工作
boost::unordered_map< std::string, std::string>::iterator Begin();
是否有人帮助
答案 0 :(得分:0)
在类模板正文外定义类模板的成员函数时,需要指定模板详细信息。
对于您的情况,您需要使用:
template< class Tkey, class Tvalue> // Missing from your code.
boost::unordered_map<TKey, TValue>::iterator CMyUnorderedMap< TKey, TValue >::Begin()
{
return m_myMap.begin()
}
答案 1 :(得分:-1)
在我更改了以下代码后,它工作了
typename boost::unordered_map<TKey, TValue>::iterator CMyUnorderedMap< TKey, TValue >::Begin()
{
return m_myMap.begin()
}
在功能的解除和防御中添加关键字 typename
<ListView
<RelativeLayout />
/>