First of all, the need to really hide such things always happens due to the dirty design of the program. You are trying to solve problem X, and you think method Y will do it. So you ask us how to make Y work, although this is most likely not the right solution to start with. The root of the problem may be that X is improperly designed.
, :
typedef struct func_wrapper_t
{
struct func_wrapper_t (*func) (int);
} func_t;
...
func_t some_function (int x)
{
...
return (func_t){ some_function };
}
...
int main(void)
{
func_t f = some_function(0);
return 0;
}