The basic answer is you can't. std::function is not comparable. Not with less than and not with equality. You can store them in a sequence container if you wish, but there's no way to check if you already have a function already stored or not.
Careful, that may not do what you expect. If you have two function void foo(void) and void bar(void) and try to add both to your vector, they would look like duplicates to your addFun() function.
Yeah, even using function objects its possible to get situations where functions with different behaviors will look the same to that kind of test. Ex:
void foo(int i);
It has been a while since I posted on this forum let alone dabbled in C++ but I can give this a shot.
I think the general gist is you are trying to be too fancy in your implementation. C++ is not really designed for function comparison. There is just not enough data to do so.
In this senario what I would do is keep it very simple. Not sure if this will work for what you want but what I would do is consider using a sort of key value hashtable data structure. One such example would be std::map. This will allow you to provide the extra data necessary to aquire the correct function when you need it. For the key you can use a descriptive name and for the value you can store a function pointer. I am not sure about std::function as I am a bit old on my C++ knowledge.
I appologize if this does not solve your issue but maybe it will give you a bit of a perspective to push you in the right direction.