Мне кажется, что все работает нормально, если я просто опущу extern "C"
в вашем typedef. То есть следующие компиляции, ссылки и запускаются без предупреждений, ошибок или проблем:
foo.c:
#include <stdio.h>
int foo(int x) {
return printf("%x\n", x);
}
test.cpp:
extern "C" int foo(int);
template <typename return_t_, typename arg1_t_>
struct test
{
typedef return_t_ (*C_fun1_t)(arg1_t_);
C_fun1_t myFn;
};
int main() {
test<int, int> t;
t.myFn = foo;
return t.myFn(5);
}
Для гуру C ++: я не знаю тонкости того, что отличает связь C от C ++. Есть ли какие-то скрытые проблемы, которые не могли бы появиться в простом примере, подобном этому?