是否可以在模板中键入一个指向外部的"C"函数类型?

Dan*_*ien 9 c++ templates typedef extern

我想在typedef一个模板中添加一个public ,用于指向使用"C"语言链接的函数take-one-argument的指针.

我试过了:

extern "C" {
    template <typename return_t_, typename arg1_t_>
    struct test
    {
        typedef return_t_ (*C_fun1_t)(arg1_t_);
    };
}
Run Code Online (Sandbox Code Playgroud)

和:

template <typename return_t_, typename arg1_t_>
struct test
{
    extern "C" {
        typedef return_t_ (*C_fun1_t)(arg1_t_);
    }
};
Run Code Online (Sandbox Code Playgroud)

和:

template <typename return_t_, typename arg1_t_>
struct test
{
    extern "C" typedef return_t_ (*C_fun1_t)(arg1_t_);
};
Run Code Online (Sandbox Code Playgroud)

没有成功.

我想要完成的是什么?

Fre*_*urk 11

C++ 03,§7.5p4:

链接规范仅在命名空间范围内发生....对于类成员的名称和类成员函数的成员函数类型,将忽略AC语言链接.

不幸的是,你无法在当前的C++中做到这一点.在最新的C++ 0x草案中,此文本未更改,但"template typedefs"可能能够完成它.