top | item 44284735

(no title)

mandarax8 | 8 months ago

What he shows here is 75% of c++26's std::function_ref. It's mainly missing variadic arguments and doesn't support all types of function objects.

https://github.com/TartanLlama/function_ref/blob/master/incl...

discuss

order

kjksf|8 months ago

I can honestly say that I couldn't write that thing in 100 years.

I can't even read it.

That's the fundamental problem with C++: I've understood pretty much all Go code I ever looked at.

The code like the above is so obtuse that 0.001% of C++ programmers is capable of writing it and 0.01% is capable of understanding it.

Sure, I can treat it as magic but I would rather not.

moonshadow565|8 months ago

It's not that complex if you remove all the stuff you don't use: https://godbolt.org/z/rM9ejojv4 .

Main things you would need to understand is specialization (think like pattern matching but compile time) and pack expansion (three dots).

mandarax8|8 months ago

Yeah it's a shame that to go from your idea to something that's 'general' (ie just some arbitrary arguments) you need to write this arcane garbage.

spacechild1|8 months ago

Do you understand how your compiler works? Shouldn't you be writing assembly instead? You can't understand all internals and that's perfectly fine.

Why do you even care how std::function is implemented? (Unless you are working in very performance critical or otherwise restricted environments.)