【发布时间】:2012-11-03 21:56:18
【问题描述】:
我正在寻找声明外部“C”函数指针的类型。它是一个成员变量。 this question 中的语法我无法编译。
template<typename Sig> struct extern_c_fp {
extern "C" typedef typename std::add_pointer<Sig>::type func_ptr_type;
};
我已经尝试将extern "C" 放在两端,在typedef 和typename 之间以及type 和func_ptr_type 之间,但是编译器全部拒绝。有什么建议吗?
【问题讨论】:
-
使用
extern "C"别名模板,这将起作用。 open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1463 -
顺便说一句,您需要
Sig才能成为extern "C"。添加到函数类型的指针没有链接。它是函数类型本身。在形成函数类型时诱导链接。不是在命名现有函数类型时 - 现有类型具有它所具有的链接。 -
不幸的是
extern "C" { template<typename T> struct A {}; }被实现拒绝。他们没有将链接应用到A,而是尝试应用它并违反模板不应具有 C 语言链接的规则。恕我直言,这样的代码是有效的......语言链接不适用于模板,因此模板永远不会有 C 语言链接。这样的代码会很有用! -
我在这里遗漏了什么吗?你为什么要这样做?