【问题标题】:Passing a void function as a parameter to a void function将 void 函数作为参数传递给 void 函数
【发布时间】:2021-11-19 22:41:44
【问题描述】:

这可能看起来很愚蠢,但请...

class Button{

public:

    void func();

    void Button(void func()){

        //Do something.

        //Like if(something){
    func();
}

    }

};

如何将func() 作为参数传递给Button()

提前致谢!

【问题讨论】:

  • 需要将函数Button的参数声明为指向成员函数的指针,因为func是成员函数。
  • 看看函数指针或者std::function的含义

标签: c++ parameter-passing void


【解决方案1】:

func 不能作为参数传递给 ButtonButton的参数是函数指针,函数指针不能指向非静态成员函数。 func 是非静态成员函数,不能被函数指针指向。

解决方案:

  • 接受指向成员函数的指针而不是函数指针作为参数。
  • 使func 成为非成员函数或静态成员函数,可以由函数指针指向。

【讨论】:

  • 哦,非常感谢,但我仍然收到此错误:error: return type specification for constructor invalid|。这跟别的有关系吗?
  • @EEE 这是另一个问题。您的函数声明是构造函数和常规函数语法的混合体。要么删除void,要么把函数名改成类名以外的名字。
  • 非常感谢!完美运行:D
【解决方案2】:

在 C++11 及更高版本中,您可以使用std::function,例如:

#include <functional>

class Button{
public:
    void Button(std::function<void()> func){
        if (something){
            func();
        }
    }
};

这样,您同样可以接受任何可调用类型,无论是独立函数、lambda、std::bind() 的结果等。

【讨论】:

  • 哦,非常感谢,但我仍然收到此错误:error: return type specification for constructor invalid|。这跟别的有关系吗?
  • @EEE 这与Button()Button 类同名有关,因此它被视为类构造函数,它不能指定返回值。如果您真的打算将Button() 用作构造函数,请删除void。否则,将Button() 重命名为其他名称。
  • 非常感谢!完美运行:D
猜你喜欢
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
相关资源
最近更新 更多