一段时间以前,我正在阅读我的一位教授编写的代码,我注意到他的这种做法是从不使用封装类内部的公共函数。即使公共函数是单行的,其唯一的工作就是简单地将参数传递给私有函数。所以他所有的课看起来都像这样
class A{
public:
void do_work(Some_object& obj){
m_do_work(obj);
}
private:
void m_do_work(Some_object& obj){
// actual work is done here
}
};
这似乎浪费了开发时间和运行时间,因为额外级别的间接操作会增加开销。那么,这种风格的真正好处是什么?
答案 0 :(得分:0)
公共函数是公共接口,它定义类的用户查看类的方式。
您的教授正在将实现的细节隐藏在私有功能中,并通过额外的间接级别,他可能打算保留公共功能的原始实现,同时在以后仅更改私有功能的内部。 它使事情变得更加模块化,以牺牲性能为代价。
除了教学示例之外,如果此类调用影响应用程序的关键路径,则必须通过性能分析来做出决定。
答案 1 :(得分:0)
我曾经这样做过,可以在类的内部和外部调用私有函数。由于我的公共函数必须在调用此函数之前锁定互斥体,而我的私有函数则不需要,因此它很有用。就是这样;
public:
void set_configuration()
{
std::lock_guard<std::mutex> lg(m);
reconfigure_output();
}
private:
void reconfigure_output()
{
...
}
void some_other_function()
{
...
reconfigure_output();
}