CMouse
CMouse

Reputation: 130

C++ 03 equivalent of C++11 lambda

Referring to my previous question, as the explanation is required in detail. How is the following code snippet working, fundamental and C++ 03 equivalent ?

 auto get_option_name = [](const std::pair<const std::string, std::string>& p) -> const std::string& {
    return p.first;
 };

Upvotes: 1

Views: 1910

Answers (2)

Shalom Craimer
Shalom Craimer

Reputation: 21459

@Garf365's answer is the best. A lambda and a class like that one really are the most similar - you can use them just like callable functions, and pass around pointers and references to them.

However, you may also want to learn about using function templates to do this work during compile-time, especially when passing them as a parameter to another template, as in using the boost library.

I was curious if there was an improvement in the complexity of the code the compiler produced by using a function template, and there was!

Look for yourself:

Thank you for asking the question and leading me to look into it!

Upvotes: 2

Garf365
Garf365

Reputation: 3707

It's equivalent to:

class Extractor {
    // Definition of "function call" operator, to use instance
    // of this class like a function
    const std::string& operator()(const std::pair<const std::string, std::string>& p) {
        return p.first;
    }
};

Extractor get_option_name;

More information on wikipedia or on stackoverflow

Upvotes: 3

Related Questions