C ++ lambda返回类型不是预期的

时间:2013-06-10 07:14:45

标签: c++ c++11 lambda

我正试图让C ++ 11 lambdas失效。我确信有一种方法可以用lambda初始化temp(可能不是最好的方法),但我一直无法提出这个解决方案。

所需结果: temp应包含data中每个元素的空字符串。

以下是我通常初始化temp的方式:

vector<string> temp;
for(auto i : data){
  temp.push_back("");
}

这是最接近(我相信)我已经找到了一个lambda解决方案:

auto num = data.size();  //can't pass class members (data) to capture list
auto temp = [num](vector<string> strs) -> vector<string> {
  for(int i = 0; i < num; ++i){
    strs.push_back("");
  }
  return strs;
};

但是,当我致电temp.size()时,我收到以下错误:

struct ProteinAnalyzer::convert_sequences()::__lambda0’ has no member named ‘size’ (使用GCC 4.8.1)

我甚至明确地声明了返回类型,所以我很困惑为什么这个lambda没有返回vector<string>

1 个答案:

答案 0 :(得分:1)

感谢评论,我找到了解决问题的方法。如果有人好奇,我就用lambda函数初始化temp

auto num = data.size();
auto temp = [num](){
  vector<string> temp;
  for(int i = 0; i < num; ++i){
    temp.push_back("");
  }
  return temp;
}();

我的问题是我把lambda等同于它的回归 - 两个不同的东西。

......虽然如评论中所述,vector<string> temp(data.size(), "");可能是最好的(最擅长)方式。