【问题标题】:c++ select return type between lists<string> and list<std::pair<string, string>>c++ 选择列表<string> 和列表<std::pair<string, string>> 之间的返回类型
【发布时间】:2018-02-21 21:09:16
【问题描述】:

我想做如下功能:

list<string> or list<std::pair<string, string>> get(int a){
     list<string> a;
     list<std::pair<string, string>> b;

     if(a == 1)
        return a;
     else
        return b;

}

实现上述功能的最佳方法是什么?

【问题讨论】:

  • 而你为什么要做这样的事情?
  • 这感觉就像XY problem
  • 您可以使用带有专门版本的模板化函数。
  • 你可以返回一个void *到你想要的列表,但是感觉就像C:ideone.com/K33zrG例子有内存泄漏。
  • 如果存在该功能,您将如何使用它?

标签: c++ list types return


【解决方案1】:

你不能。 C++ 是静态类型的,这意味着您不能在运行时更改函数的返回类型。

但是你可以使用 tuples 来做一些事情,虽然这将取决于你来识别活跃的成员:

std::tuple<list<string>, list<std::pair<string, string>>> x_y_problem() 
{
    return std::make_tuple/*ToDo populate as you need*/
}

在通话现场:

 list<string> x;
 list<std::pair<string, string>> y;
 std::tie(x, y) = x_y_problem();

参考:http://en.cppreference.com/w/cpp/utility/tuple/make_tuple

【讨论】:

  • variant&lt;list&lt;string&gt;, list&lt;std::pair&lt;string, string&gt;&gt;&gt; 也存在
  • 每次构造一个无用的对象都会让我内心深处有些不安。
  • @StoryTeller:但它确实让我埋葬了一两个双关语。看着这些让你开心吗? google.co.uk/…
猜你喜欢
  • 2019-04-12
  • 1970-01-01
  • 2021-09-13
  • 2021-06-12
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多