C++ 将自由函数绑定为类成员函数

C++ 将自由函数绑定为类成员函数,c++,C++,我已经尝试将自由函数绑定为类成员函数,它是有效的(参见下面的代码)。但我对它的工作原理感到困惑,并提出了一些问题 问题: 调用obj_A.func_A()与直接调用func_X()相同吗?在第一种方法中是否在内部创建指针 通过obj_A调用这些方法是否会增加额外的开销 Class_A::func_A/B真的是成员函数吗?它的行为类似于静态的,因为它无法访问Class\u a成员 这是一种奇怪的设计模式吗?有什么改进的建议吗 #包括 #包括 使用名称空间std; //定义一些(参考)函数签

我已经尝试将自由函数绑定为类成员函数,它是有效的(参见下面的代码)。但我对它的工作原理感到困惑,并提出了一些问题

问题:

  • 调用
    obj_A.func_A()
    与直接调用
    func_X()
    相同吗?在第一种方法中是否在内部创建指针

  • 通过
    obj_A
    调用这些方法是否会增加额外的开销

  • Class_A::func_A/B
    真的是成员函数吗?它的行为类似于静态的,因为它无法访问
    Class\u a
    成员

  • 这是一种奇怪的设计模式吗?有什么改进的建议吗

  • #包括
    #包括
    使用名称空间std;
    //定义一些(参考)函数签名类型
    使用func_A_t=int(&)(常量字符串&);
    使用func_B_t=double(&)(int,int);
    //类,该类有两个定义来自外部的“方法”(func_A,func_B)
    A类{
    公众:
    字符串名;
    //函数成员作为引用?
    func_A_t&func_A;
    func_B_t&func_B;
    类A(字符串参数名称、函数A和函数A、函数B和函数B):
    名称{arg_name},
    func_A{arg_func_A},
    func_B{arg_func_B}
    {
    }
    };
    //外部“自由”功能
    int func_X(常量字符串&s){
    返回s.size();
    }
    //外部“自由”功能
    双函数(整数a,整数b){
    返回1.75*a*b;
    }
    int main(int argc,字符**argv){
    //构造obj_A,将自由函数(func_X,func_Y)绑定为类_A成员函数
    类对象{“疯狂测试”,func_X,func_Y};
    int r1=obj_A.func_A(“你好”);
    库特
    调用
    obj_A.func_A()
    与直接调用
    func_X()
    相同吗

    在第一种方法中是否在内部创建指针

    是(假设您的意思是“在构造函数中”)

    通过
    obj_A
    调用这些方法是否会增加额外的开销

    是的。虽然编译器可能会根据您使用它的方式对此进行优化,但也可以增加间接级别

    Class\u A::func\u A
    /B真的是成员函数吗

    不,它们是碰巧是函数指针的成员变量

    这是一种奇怪的设计模式吗

    这是主观的,但我认为不是。它在依赖注入架构中被大量使用。例如,注入如何获得数据库句柄的细节

    有什么改进的建议吗

    我们需要一个非常具体的用例来提供指导。StAdExoad可能不是讨论的最佳场所。现在,公开注入依赖性不是典型的。你可以考虑一个代理模式,在那里你可以调用函数。这样可以让你更灵活。