Lambda函数返回自动行为

时间:2013-02-05 15:36:10

标签: c++ c++11 lambda

我在尝试创建以下lambda函数时遇到问题:

const auto var x = [&y]() -> /*???*/ {
if (y == type1) {
  return some_type_1;
} else if (y == type2) {
  return some_type_2;
} else // ...

我知道我不能使用auto作为返回类型。但我怎么能用另一种方式呢?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果some_type_1some_type_2有共同类型,请写:

const auto var x = [&y]() -> typename std::common_type<
  decltype(some_type_1),
  decltype(some_type_2)>::type {
if (y == type1) {
  return some_type_1;
} else if (y == type2) {
  return some_type_2;
} else // ...

等效地,您可以使用三元表达式:

const auto var x = [&y]() {
  (y == type1) ? some_type_1 :
  (y == type2) ? some_type_2 :
  ...;
}