I'm studying c++11 especially interested in lambda.
After some practices, I assumed that lambda closure is an nameless function object.
So I wrote this code.
template <class callable_object>
void lambda_caller( callable_object lambda )
{
std::cout<< sizeof(lambda) << endl;
lambda();
}
I know that I can use std::function
instead of using template, but I don't want the overhead while typecasting.
But I found one problem reading this question : Why can't I create a vector of lambda in C++11?
The answerer said, "Every lambda has a different type- even if they have the same signature.".
Compilers makes different codes for different classes.
So I think that my compiler will make another version of lambda_caller
whenever I make another definition of lambda to pass.
Is there any way to avoid it, except using std::function
? Isn't there any generic type for lambda closure?
You can't avoid it. Lambda is just a class with operator()() overloaded which executes your code. So different code - different classes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With