std::map<std::string, std::string> 和 std::list<std::map<std::string, std::string>> 定义一个方法两种返回类型
时间: 2023-09-15 08:17:57 浏览: 172
可以使用 C++11 的 decltype 关键字来实现这个方法。具体实现可以参考以下代码:
```c++
#include <iostream>
#include <map>
#include <list>
// 定义方法,返回类型为 std::map<std::string, std::string> 或 std::list<std::map<std::string, std::string>>
auto myMethod(int n) -> decltype(std::declval<std::list<std::map<std::string, std::string>>>()[0])
{
if (n % 2 == 0) {
std::map<std::string, std::string> m = {{"key1", "value1"}, {"key2", "value2"}};
return m;
}
else {
std::list<std::map<std::string, std::string>> l = {{{"key1", "value1"}, {"key2", "value2"}}};
return l.front();
}
}
int main()
{
auto r1 = myMethod(2);
std::cout << "r1:" << std::endl;
for (const auto& kv : r1) {
std::cout << kv.first << ": " << kv.second << std::endl;
}
auto r2 = myMethod(3);
std::cout << "r2:" << std::endl;
for (const auto& kv : r2) {
std::cout << kv.first << ": " << kv.second << std::endl;
}
return 0;
}
```
在上述代码中,使用 `decltype(std::declval<std::list<std::map<std::string, std::string>>>()[0])` 来定义返回类型,它的含义是取 std::list<std::map<std::string, std::string>> 的第一个元素的类型,也就是 std::map<std::string, std::string> 的类型。在方法内部,根据输入参数 n 的奇偶性,返回不同类型的值。最后在 main 函数中测试该方法的返回值。
阅读全文