【问题标题】:Passing Void into a class as a pointer then executing its contents将 Void 作为指针传递给类,然后执行其内容
【发布时间】:2011-09-14 19:29:03
【问题描述】:

如何将函数作为参数传递然后执行它。我正在尝试做这样的事情:

class Foo{
private:
    void (*external);
public:
    Foo(void (*function)()){ *external = *function; }
    ~Foo(){ }
    bool Execute(){ 
        *external(); // Somehow execute 'external' which does the same thing with 'function' 
        return true
    }
};

void pFnc(){
printf("test");
}


int main(){
 Foo foo = Foo(&pFnc);
 foo.Execute();
 return 0;
}

这当然行不通。

【问题讨论】:

    标签: c++ function pointers arguments void


    【解决方案1】:

    你很亲密。

    class Foo
    {
    public:
        typedef void(*FN)(void);
        Foo(FN fn) : fn_(fn) {};
        bool Execute()
        {
            fn_();
            return true;
        }
        FN fn_;
    };
    
    void pFunc(){
        printf("test");
    }
    
    int main()
    {
        Foo foo(&pFunc);
        foo.Execute();
    }
    

    【讨论】:

      【解决方案2】:

      试试:

          void (*external)();
      

      您的原始声明是指向 void 的指针,而不是指向返回 void 的函数的指针。

      【讨论】:

        【解决方案3】:

        设置为

        external = function;
        

        并执行

        external();
        

        另外,external 必须声明为函数指针void (*external)()。否则,你必须在函数指针和空指针之间进行转换。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-27
          • 2012-11-08
          • 1970-01-01
          • 2013-06-25
          • 1970-01-01
          • 2012-10-06
          • 2021-07-03
          相关资源
          最近更新 更多