【问题标题】:Access auto parameter's type within lambda在 lambda 中访问 auto 参数的类型
【发布时间】:2020-04-23 10:09:12
【问题描述】:

我正在为样板代码使用 lambda 函数:

auto import = [&](auto & value){
   // Do some stuff
};

由于value 实际上是一个std::vector,我需要访问它的value_type 静态成员以在其元素之一上调用模板函数。

我尝试使用 decltype 没有成功:

auto import = [&](auto & value){
   decltype(value)::value_type v;
};

有什么办法吗?

【问题讨论】:

  • use of 'auto' in lambda parameter declaration only available with c++14...请更新您的问题标签

标签: c++ templates c++14 auto decltype


【解决方案1】:

value 的类型是左值引用,不能从中获取成员类型,必须删除引用部分,例如

typename std::decay_t<decltype(value)>::value_type v;

PS:依赖类型名还需要提前加上typename(如@Vlad answered)。见Where and why do I have to put the “template” and “typename” keywords?。

LIVE

【讨论】:

  • typename 也是必需的。
  • @HolyBlackCat 是的,所以我们需要结合这两个答案来得到正确的解决方案..
  • 是的,typename std::decay_t::value_type 工作得很好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多