如何将成员声明为指向外部"C"函数的指针?

How to declare a member as a pointer to an extern "C" function?

本文关键字:函数 指针 外部 成员 声明      更新时间:2023-10-16

我希望声明外部" C"功能指针的类型。它是成员变量。我无法编译的这个问题中的语法。

template<typename Sig> struct extern_c_fp {
    extern "C" typedef typename std::add_pointer<Sig>::type func_ptr_type;
};

我已经尝试将extern "C"放在两端,在typedeftypename之间以及typefunc_ptr_type之间,但编译器拒绝了所有内容。有任何建议吗?

extern "C" {
    template<typename R, typename... Args>
    using extern_c_fp = R(*)(Args...);
}
using my_function_ptr = extern_c_fp<void, int, double>;
// returns void, takes int and double

这不使用与您使用的界面相同的接口,但是可能有一种方法来提取Sig的返回类型和参数类型。

这在Clang 3.1中起作用。Xeo指出,它在GCC中无效。我不确定这是否是任何一个编译器中的错误,所以在使用此编译时要小心。

您无法声明这样的类型(从7.5p4起):

仅在命名空间范围(3.3)中发生链接规范。