C++ 将boost::函数克隆到指针中并使用该指针调用包装函数

C++ 将boost::函数克隆到指针中并使用该指针调用包装函数,c++,clone,boost-function,C++,Clone,Boost Function,我试图使用指针创建一个boost::function的副本,并使用该指针调用该函数。我的问题是 这样克隆一个boost::function是正确的 对fp->target()的调用应该调用还是不调用函数 通过boost::函数 非常感谢 boost::function<void()> f = boost::bind(&my_f,my_value); boost::function<void()> fp* = new boost::function<v

我试图使用指针创建一个
boost::function
的副本,并使用该指针调用该函数。我的问题是

  • 这样克隆一个
    boost::function
    是正确的
  • fp->target()
    的调用应该调用还是不调用函数 通过boost::函数
  • 非常感谢

      boost::function<void()> f = boost::bind(&my_f,my_value);
      boost::function<void()> fp* = new boost::function<void()>( f ); // clone f
    
      typedef void(*fptr_type)();
      fp->target<fptr_type>();  // doesn't work! Is this correct?
    
      fp->operator(); // doesn't compile
                      //=>error: statement cannot resolve address of overloaded function
    
    boost::function f=boost::bind(&my\u f,my\u值);
    boost::function fp*=新的boost::function(f);//克隆f
    typedef void(*fptr_type)();
    fp->target();//不行!这是正确的吗?
    fp->operator();//不编译
    //=>错误:语句无法解析重载函数的地址
    
    看看这段代码,我想这就是你想要做的:

    void my_f(void)
    {
        cout << "hello";
    }
    
    int main(void){
    
      boost::function<void()> f = boost::bind(&my_f);
      boost::function<void()>* fp = new boost::function<void()>( f ); 
    
      typedef void(*fptr_type)();
      fp->target<fptr_type>(); 
    
      (*fp)();
    }
    
    void my\u f(void)
    {
    cout target();
    (*fp)();
    }
    

    用GCC编译,效果很好,我可以看到cout。

    看看这段代码,我想这就是你想要做的:

    void my_f(void)
    {
        cout << "hello";
    }
    
    int main(void){
    
      boost::function<void()> f = boost::bind(&my_f);
      boost::function<void()>* fp = new boost::function<void()>( f ); 
    
      typedef void(*fptr_type)();
      fp->target<fptr_type>(); 
    
      (*fp)();
    }
    
    void my\u f(void)
    {
    cout target();
    (*fp)();
    }
    

    用GCC编译,效果很好,我可以看到cout。

    如果boost::function提供了一个复制构造函数,那么在这种情况下,您可以假设它可以工作并解决f的所有生存期问题(否则就不会提供,您应该在它们的bugzilla上提交一个bug报告)

    只是功能,你要做的是:

    fp->operator()();
    
    或如上海报所示:

    (*fp)();
    

    如果boost::function提供了一个复制构造函数,那么您可以假设它可以工作,并在这种情况下处理f的所有生存期问题(否则就不会提供它,您应该在它们的bugzilla上提交一个bug报告)

    只是功能,你要做的是:

    fp->operator()();
    
    或如上海报所示:

    (*fp)();
    
    为什么,哦,你为什么要
    新的
    复制?!请告诉我一个合理的理由。为什么,哦,为什么你
    new
    ing复制品?!请告诉我一个合理的理由。