相关疑难解决方法(0)

如何强制转换为boost :: bind(&myClass :: fun,this,_1,_2,_3)到typedef void(*fun)(arg1,arg2,arg3)?

在lib Bullet中定义了一种类型:

typedef void (*btNearCallback)(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo);
Run Code Online (Sandbox Code Playgroud)

在那里的文档中提供了一个使用示例(第23页):

void MyNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo) {
        // Do your collision logic here
        // Only dispatch the Bullet collision information if you want the physics to continue
        dispatcher.defaultNearCallback(collisionPair, dispatcher, dispatchInfo);
}
Run Code Online (Sandbox Code Playgroud)

我将这个示例代码复制到我的类defention中,所以我的类得到了这个函数,我将能够做这样的演员:

    dispatcher->setNearCallback(boost::bind(&BulletAPIWrapper::MyNearCallback, this, _1, _2, _3));
Run Code Online (Sandbox Code Playgroud)

而不是像dispatcher->setNearCallback(MyNearCallback);Bullet教程那样的C.

然而我的VS2010 sp1给了我一个错误:

Error   44  error C2664: 'btCollisionDispatcher::setNearCallback' : cannot convert parameter 1 from 'boost::_bi::bind_t<R,F,L>' to 'btNearCallback'
Run Code Online (Sandbox Code Playgroud)

所以我想知道如何将boost :: bind转换为这样的typedef?

是否有可能具有静态类函数(或至少是全局函数):

void MyNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-bind c++03

9
推荐指数
1
解决办法
1175
查看次数

如何将std :: function对象传递给带函数指针的函数?

我正在尝试c使用这个熟悉的模式与写入的库进行交互:

void some_c_handler(void(*func)(void*), void* data);
Run Code Online (Sandbox Code Playgroud)

现在,我想C++为这个函数编写一个包装器,如下所示:

void my_new_cpp_handler(std::function<void()>&& func)
{
  void (*p)() = foo(func);
  void* data = bar(func);
  some_c_handler(p, data);
}
Run Code Online (Sandbox Code Playgroud)

双方some_c_handlermy_new_cpp_handler正在解决相同的问题; 他们与某个州一起承担某种功能.但后者是首选的,因为它从用户抽象出大部分实现细节,并允许简单地传入lambda对象.

因此,my_new_cpp_handler应该获取func它给出的参数,将其转换为函数指针并将其状态传递给data.

我对标准或执行情况了解不够,std::function知道这是否是一个合理的要求.能foobar存在吗?

换句话说,我想要的是能够将有状态函数传递给c回调处理程序,而不必手动实例化我自己的struct类型以传递它.显然std::function已经为我们做了这个,所以我希望能够以某种方式将函数指针与状态分开并将其传递给c-style处理程序.这可能吗?

c c++

8
推荐指数
3
解决办法
3705
查看次数

C ++:将std :: function转换为gsl_function

我想使用GNU科学库,需要转换std::functiongsl_function,类型为double (* function) (double x, void * params)

到目前为止,我只是尝试过:

class Numerics {
 public:
  ....
  double integrate(function<double(double)> &func) {
    double result, error;
    gsl_function F;
    F.function = static_cast<(*)(double, void *)>( func );
    gsl_integration_qag(&F, 0, 1, epsabs_, epsrel_, 1000, 6, w_, &result, &error);
    return result;
  }
  ...
};
Run Code Online (Sandbox Code Playgroud)

,这使我退回错误

类型名称需要指定符或限定符

c++ casting gsl c++11

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

标签 统计

c++ ×3

boost ×1

boost-bind ×1

c ×1

c++03 ×1

c++11 ×1

casting ×1

gsl ×1