我正试图让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>
答案 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(), "");
可能是最好的(最擅长)方式。