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可能不是讨论的最佳场所。现在,公开注入依赖性不是典型的。你可以考虑一个代理模式,在那里你可以调用函数。这样可以让你更灵活。