繁体   English   中英

如何将成员声明为指向extern“C”函数的指针?

[英]How to declare a member as a pointer to an extern “C” function?

我想要声明一个extern“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" ,但编译器拒绝了所有。 有什么建议么?

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指出它在海湾合作委员会中没有用 我不确定这是否是任何编译器中的错误,因此在使用它时要小心。

你不能声明类似的typedef(从7.5p4开始):

链接规范只应在命名空间范围内发生(3.3)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM