Naios / function2

Improved and configurable drop-in replacement to std::function that supports move only types, multiple overloads and more
http://naios.github.io/function2
Boost Software License 1.0
545 stars 46 forks source link

Suggestion: Allow users of function2 to know easily whether their lambdas are stored inplace #36

Open romange opened 4 years ago

romange commented 4 years ago

@Naios Suggestion

For example,

using MyFunction =  fu2::function_base<...>;
auto cb = [foo, bar] {};
static_assert(MyFunction::is_inplace(cb), "Lambda too big!")

This could be useful to maintain code over time and not to break performance-related assumptions..

Naios commented 4 years ago

This could be really useful indeed. Probably it will be implemented in the future.

Ahajha commented 2 years ago

This could also be useful as a configuration option to disallow function objects that are too large for SFO.

using MyFunction =  fu2::function_base<...>;
auto cb1 = [foo, bar] {};
auto cb2 = [foo, bar, baz] {};
MyFunction f1{cb1}; // allowed
//MyFunction f2{cb2}; // too big for SFO, compile error
Naios commented 2 years ago

Yes, that's right. Something like fu2::inplace_function (which itself could be a specialization of fu2::function_base) could be quite useful.

VioletGiraffe commented 1 year ago

I came here looking for an in-place move-only function, and I very much vote for both proposals. In some places I want my functions to be in-place only, with a possibility to increase the storage size as needed.