【问题标题】:C++ class function pointerC++ 类函数指针
【发布时间】:2022-01-10 03:45:09
【问题描述】:

我有一个 C++ 函数指针请求。以下是我需要的示例:

在 API 文件中:

class MyClass {
    public:
        void function1();
        void function2();
        void function3();
        void function4();
};

在主文件中:

MyClass globalglass;

void global_function_call(???)// <---- how to do declaration of argument???
{
    //Do *function
}

int main()
{
    global_function_call(&globalglass.function1()); // <----  pseudocode, I need to use global class 
    global_function_call(&globalglass.function2());
    global_function_call(&globalglass.function3());
    global_function_call(&globalglass.function4());

    return 1;   
}

我不知道要声明...

【问题讨论】:

  • global_function_call 应该做什么?它应该在globalglass 上专门调用functionX,还是您也想将对象传递给它?
  • 只有一个指向成员&MyClass::function1的函数指针是不够的,不能调用,还需要提供类实例来调用。看看:learncpp.com/cpp-tutorial/…。我发现该语法最有用/可重用: auto lambda1 = [&globalclass]{global_class.function1();}; global_function_call(lambda1);
  • 哦,请尝试提出一个不需要全局实例的设计。对于可维护性/可测试性而言,这不是好的设计。您可能想了解依赖注入:en.wikipedia.org/wiki/Dependency_injection_

标签: c++ function-pointers


【解决方案1】:

要执行您的要求,您可以使用指向成员的方法,例如:

MyClass globalglass;

void global_function_call(void (MyClass::*method)())
{
    (globalglass.*method)();
}

int main()
{
    global_function_call(&MyClass::function1); 
    global_function_call(&MyClass::function2);
    global_function_call(&MyClass::function3);
    global_function_call(&MyClass::function4);

    return 1;   
}

Online Demo

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2012-01-25
    • 2018-09-12
    • 2012-04-03
    相关资源
    最近更新 更多