如何使用unordered_multimap在模板类方法中进行make_pair
How can I do make_pair within a template class method using unordered_multimap?
我有以下代码,我知道我几乎重新实现了容器,但是我想这样做,我将有更多特定的方法和我不想重复不同类型的多图的代码:
template<class TYPE>
class MapTemplate {
public:
typedef typename std::unordered_multimap <QString, QString>::iterator iterator;
void addElement(const QString& elementName, const TYPE& T) {
unorderedMultiMap.insert(std::make_pair<QString, TYPE>(elementName, T));
}
std::pair<iterator, iterator> getEqual_range(const QString& elementName) {
return unorderedMultiMap.equal_range(elementName);
}
int removeElement(const QString& elementName) {
return unorderedMultiMap.erase(elementName);
}
int getNumberOfElements() const {
return unorderedMultiMap.size();
}
bool isMapEmpty() const {
return unorderedMultiMap.isEmpty();
}
iterator isElementInMap(const QString& elementName) const {
return unorderedMultiMap.find(elementName);
}
private:
std::unordered_multimap<QString, TYPE> unorderedMultiMap;
};
我有两个有关的问题:如果我尝试userProgMap.addElement(userName, programName);
为MapTemplate<QString> userProgMap
和用户名&amp;programName两者qString ,我遇到一个错误,说无法将参数从qString转换为_ty1&amp;&amp; 。
另一方面,我怎么能拥有这样的迭代器:
typedef typename std::unordered_multimap <QString, TYPE>::iterator iterator;
有可能吗?这也显示出错误,我必须使用<QString, QString>
谢谢。
因为C 11 make_pair
定义如下:
template< class T1, class T2 >
std::pair<V1,V2> make_pair( T1&& t, T2&& u );
通过std::make_pair<QString, TYPE>
,您指定T1
和T2
为QString
,因此签名为make_pair(QString&&, QString&&)
,并且编译器拒绝了这一点,因为elementName
和T
是LVALUES。LVALUE不能绑定到RVALUE参考。
要解决此问题,您应该替换
std::make_pair<QString, TYPE>(elementName, T)
std::make_pair(elementName, T)
然后,您在此处让转发引用工作,T1,T2将被推论为:const QString&
,并且代码正常工作 - lvalue可以绑定到lvalue参考。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在静态库中嵌入类方法
- 如何制作一个将函数作为参数的类方法
- 从父类方法返回子类对象
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 单独定义模板化嵌套类方法的正确语法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何访问由共享指针保存的类方法?
- 将子类方法声明为基类的友元
- 我的模板类方法返回错误类型?
- Qt将信号与另一个类方法连接
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 检查类方法中是否(此 == nullptr)
- 从基类实例调用派生类方法而不进行强制转换
- 函数从唯一代码调用正确的子类方法
- C++ - 如何在不静态的情况下将回调绑定到类方法?
- C++ |DLL / EXE - 如何从导出的类调用另一个类方法?
- C++:从属性类调用顶级类方法