Trong this article, đoạn code sau được trình bày:loại trình biên dịch-suy luận cho lambdas generic
std::vector<int> ivec = { 1, 2, 3, 4};
std::vector<std::string> svec = { "red", "green", "blue" };
auto adder = [](auto op1, auto op2){ return op1 + op2; };
std::cout << "int result : "
<< std::accumulate(ivec.begin(),
ivec.end(),
0,
adder)
<< "\n";
std::cout << "string result : "
<< std::accumulate(svec.begin(),
svec.end(),
std::string(""),
adder)
<< "\n";
Nếu tôi hiểu đúng, trình biên dịch sẽ tạo ra một lớp học nội nhiều như thế này:
template<class T>
class _lambda
{
public:
T operator()(T lhs, T rhs) { return lhs + rhs; }
};
Nhưng những gì tôi không hiểu là, trong phần này của mã, adder dường như có hai loại cùng một lúc: _lambda<int>
và _lambda<string>
. Sao có thể như thế được?
Tương tự như vậy, nếu các đối số giống như'auto && lhs'. sau đó nó tạo ra 'T && lhs' .. và cứ thế. – Nawaz