Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using function pointers in C++ 11

Tags:

c++

c++11

The main reason for function pointers is to provide generic callable objects, but in C++ 11 the way to provide it would be to use std::function, so is there any reason to use function pointers in modern C++ apart from compatibility with C? In other words, is std::function a modern version of function pointers, exactly like std::array vs built-in arrays?

like image 872
w.b Avatar asked Oct 15 '14 06:10

w.b


2 Answers

Yes I'd prefer std::function nearly everywhere but there are few cases where size overhead and indirection of std::function may not be acceptable. For small callables like function pointers wrapped in std::function, there is typically no additional indirection and no dynamic memory allocation since the callable fits into the std::function but std::function may be big to hold even bigger callables so there may be a big space overhead.

like image 193
TNA Avatar answered Sep 23 '22 00:09

TNA


To be honest, I can't think of a case where I'd need std::function, and here's why. If I'm bouncing function pointers around at all, then I'm probably working at a very low level. Perhaps the reason is that C++-style inheritance has proven too restrictive so I'm designing my own polymorphism. Alternatively, I might be working on a small embedded controller where I'm really shaving off the bytes. Either way, I'll be relying on myself, and not on the compiler, to remember what types I've got etc. I'd basically be banging metal and want the metal to behave like metal, not like an elevator from Sirius Cybernetics.

The only case where I'm likely to want the overhead of std::function is if I'm trying to do something functional, like juggling closures, but if I want that then I'm unlikely to be using C++ at all.

like image 21
Adrian May Avatar answered Sep 23 '22 00:09

Adrian May