sytpb 发表于 2016-06-05 14:27

lambda 函数指针

本帖最后由 sytpb 于 2016-06-05 15:03 编辑

我想在一个函数里给多个不同lambda 函数指针赋值,所以参数是 void* 类型


class 中定义如下函数
template<typename T>
class XType
{
public:
    enum FUN_TYPE{REFLECT,COMPARE}; /*FOR EXTENSION*/

    void CallBackRegister(FUN_TYPE nType,void* ptrFun)
    {
      if(nType == REFLECT)
            _reflectFun = (FUN_REFLECT)ptrFun;
      else if(nType == COMPARE)
            _compareFun = (FUN_COMPARE)ptrFun;
    }


private:

    typedef function<T(string)>FUN_REFLECT;
    FUN_REFLECT _reflectFun;

    typedef function<T(T,T)>    FUN_COMPARE;
    FUN_COMPARE _compareFun;
}

// 调用
            XType<string>x1;
            XType<string>x2;

            x1.CallBackRegister(XType<string>::FUN_TYPE::REFLECT,(void*)([](string s){return s;}));
            x2.CallBackRegister(XType<string>::FUN_TYPE::REFLECT,(void*)([](string s){return s;}));


cannot cast from type '<lambda at bus.cpp:115:65>' to pointer type 'void *'
知道犯错,但不知道原理是什么,主要是想知道怎么解决,还在同一个函数里,不想分不同的函数里完成,或者加参数,也不用boost 。

windoze 发表于 2016-06-05 23:16

是什么让你产生了lambda是一个普通函数这种错觉呢?

sytpb 发表于 2016-06-06 10:46

回复 2# windoze


    我错了 版主!:'(
页: [1]
查看完整版本: lambda 函数指针