无序映射位置返回的对的类型
type of pair that unordered map emplace returns
我有一个在std无序映射容器上调用emplace()
方法的函数,我需要返回emplace()
调用所给出的确切返回值。我知道它返回一个迭代器的std::pair
(是否新的或旧的取决于成功的操作)和一个bool表示成功。之前我只返回bool部分,像这样:
auto result = map.emplace(std::make_pair(id, someObj));
return result.second;
,知道返回类型是bool
。但现在我需要返回原始的result
变量但我不知道它的类型所以我应该在函数原型的类中放入什么?
我尝试在迭代器上使用typeid
方法,但它给出:
St4pairINSt8__detail14_Node_iteratorIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ELb0ELb1EEEbE
作为输出。
您可以使用c++ 11的尾随返回类型和decltype
来完成此操作。这样我们就得到了一个像
auto some_function(some_parameters) -> decltype(map.emplace(id, someObj))
{
return map.emplace(id, someObj);
}
现在编译器将推断返回类型恰好是emplace
调用的返回。
如果你可以使用c++ 14或更新版本,那么你可以使用自动返回类型推导并简化代码为
auto some_function(some_parameters)
{
return map.emplace(id, someObj);
}
编译器将把函数的返回类型推断为return语句返回的类型。请注意,不能在函数体中以这种方式返回不同的类型,因为编译器将无法推断使用哪种类型。
请注意,在上面的示例中,我没有将std::make_pair
与emplace
一起使用。不像insert
需要pair
,你可以直接在emplace
中构建。
相关文章:
- 如何在模板参数中分离函数类型返回类型和参数
- 为什么要为指针返回类型返回一系列字符?
- 有没有办法根据运行时值的类型返回 constexpr 对象
- 从弱指针返回类型返回共享指针
- 无法为unique_ptr返回类型返回 nullptr
- 为什么双重类型返回无穷大
- std::is_arithmetic 为通用 lambda 中的 int 类型返回 false:未定义的行为?
- C 策略设计具有可变类型返回值
- 根据类型返回一个值
- 在C++中,将double转换为long的类型返回了不正确的值
- 作为宏参数的安装类型返回错误:字符串常量之前的预期非限定 id
- 具有引用类型返回的函数
- C++ 如何使模板<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr
- C++模板:按类型返回值
- 以Integer返回类型返回浮点值
- 使用 C++14 的自动功能类型返回扣除代替 std::common_type 是否始终安全?
- 为什么允许新运算符向每个指针类型返回*void
- 适当的函数返回类型返回日期时间
- c++中布尔类型返回函数的默认返回值
- 在c#中使用非托管c++代码对所有double类型返回0