相关疑难解决方法(0)

为什么C++ 11不支持在静态成员函数上声明extern"C"?

只要我有一个包含声明为void g(void (*callback)());的函数的C库以下代码是优雅但非法的:

struct A
{
    // error C2159: more than one storage class specified (VC++ Nov 2012 CTP)
    static extern "C" void callback()
    {}
};

g(A::callback); 
Run Code Online (Sandbox Code Playgroud)

为什么C++ 11不支持这个?

c c++ static extern c++11

15
推荐指数
2
解决办法
7423
查看次数

C++使用类方法作为函数指针类型

在C lib中,有一个函数在等待函数指针,这样:

lasvm_kcache_t* lasvm_kcache_create(lasvm_kernel_t kernelfunc, void *closure)
Run Code Online (Sandbox Code Playgroud)

其中lasvm_kernel_t定义为:

typedef double (*lasvm_kernel_t)(int i, int j, void* closure);
Run Code Online (Sandbox Code Playgroud)

现在,如果我将类中定义的方法发送到lasvm_kcache_create:

double cls_lasvm::kernel(int i, int j, void *kparam)
...
lasvm_kcache_t *kcache=lasvm_kcache_create(&kernel, NULL);
Run Code Online (Sandbox Code Playgroud)

我得到:"无法将'double(cls_lasvm :: )(int,int,void)'转换为'double()(int,int,void)'"

我该怎么办?

c++ function-pointers

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×2

c ×1

c++11 ×1

extern ×1

function-pointers ×1

static ×1