7

我正在寻找声明外部“C”函数指针的类型。它是一个成员变量。这个问题中的语法我无法编译。

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

我已经尝试将 放置extern "C"在两端,以及介于typedefandtypename和之间typefunc_ptr_type但编译器拒绝了所有。有什么建议么?

4

2 回答 2

1
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 中不起作用。我不确定这是否是任一编译器中的错误,因此在使用时要小心。

于 2012-11-03T23:17:34.377 回答
0

您不能像这样声明 typedef(从 7.5p4 开始):

链接规范应仅出现在命名空间范围 (3.3) 中。

于 2012-11-03T22:42:11.023 回答