Cで書かれた関数ポインターを引数にとる関数に、関数オブジェクトを渡す方法ってありますか?

#include <iostream>

typedef int (*FPtr)(int);

int add(FPtr f, int x, int y) {
return (*f)(x)+(*f)(y);
}

int func(int x) {
return x+1;
}

struct func2 {
const int a;
func2(int a): a(a) {}
int operator()(int x) const { return a*x; }
};

int main()
{
std::cout << add(func,2,3) << std::endl;
func2 f2(4);
//std::cout << add(f2,2,3) << std::endl;
}