lambda表达式
今天看到了一个神奇的写法,“一个函数中有另一个函数的定义”,原来是C++11的lambda表达式。
1 void Kv::load(const std::string &file) { 2 this->clear(); 3 std::ifstream reader(file); 4 assert(reader); 5 6 if (reader.is_open()) { 7 while (!reader.eof()) { 8 std::string line; 9 std::getline(reader, line); 10 if (line.empty()) continue; 11 12 const auto parse = [](const std::string &str) { 13 std::string tmp, key, value; 14 for (size_t i = 0, len = str.length(); i < len; ++i) { 15 const char ch = str[i]; 16 if (ch == ' ') { 17 if (i > 0 && str[i - 1] != ' ' && key.empty()) { 18 key = tmp; 19 tmp.clear(); 20 } 21 } 22 else { 23 tmp.push_back(ch); 24 } 25 if (i == len - 1) { 26 value = tmp; 27 } 28 } 29 return std::make_pair(key, value); 30 }; 31 32 auto kv = parse(line); 33 this->add(kv.first, kv.second); 34 } 35 reader.close(); 36 } 37 }
上面代码中的parse函数,最开始看起来确实感觉很神奇,后来发现就是lambda语法。基本格式就是:
auto f = [capture list] (parameter list) -> return type { function body}
有很多其他的博客了,这里不再赘述。