【问题标题】:C++ using passed functionC++ 使用传递函数
【发布时间】:2025-12-03 12:55:02
【问题描述】:

我有两个函数,其中一个将函数作为参数,这很好用,但我想在第二个函数中调用这个传递函数。

class XY {   
 public:

   void first(void f());
   void second();        
 };

 void XY::first(void f()){

 }

 void XY::second(){
 f(); //passed function from first()
 }

【问题讨论】:

  • 您是从第一个开始调用第二个,还是在稍后单独调用第二个?
  • 可能想看看这个。 *.com/questions/12662891/…
  • 第一个被调用一次,第二个稍后被独立调用
  • 然后您可以创建一个成员对象,其中包含一个指向 void 函数的指针,该函数首先分配给它,然后调用它。
  • @user 是的,正确类型的函数指针在这里似乎没问题。 std::function 在这种情况下似乎有点矫枉过正,但即使不需要它的特殊类型擦除功能,人们也喜欢建议它

标签: c++ c++11


【解决方案1】:

您可以使用 std::function 来存储可调用对象并稍后调用它。

class X {
    public:
        void set(std::function<void()> f) {
            callable = f;
        }

        void call() const {
            callable();
        }

    private:
        std::function<void()> callable;
};

void f() {
    std::cout << "Meow" << std::endl;
}

然后创建 X 实例并设置可调用对象:

X x;
x.set(f);

稍后调用存储的可调用对象:

x.call();

【讨论】:

  • 赞成,很棒的 c++11 答案,我只想提到模板是 标头的一部分
  • @user 我省略了必要的标题,因为它通常在书籍和演示文稿中完成以节省空间......
  • 堆栈溢出不受空间限制,就像书籍和演示文稿一样,并且鼓励使用预处理器指令,例如 #include