定义仅调用私有函数的公共函数有什么优势
What is the advantage of defining public functions that only call a private function
不久
前,我正在阅读我的一位教授编写的一些代码,我注意到他有从不使用封装类中的公共函数的做法。即使公共函数是单行函数,其唯一工作只是将参数传递给私有函数。所以他所有的课程看起来都是这样的
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
}
};
这似乎是浪费开发时间和运行时间,因为额外的间接级别会产生开销。那么这种风格的实际好处是什么呢?
公共函数是一个公共接口,用于定义类的用户查看类的方式。
您的教授在私有函数中隐藏了实现的细节,并且通过这种额外的间接级别,他可能打算保留公共函数的原始实现,同时在以后仅更改私有函数的内部。它以牺牲性能为代价使事情变得更加模块化。
除了教学示例之外,如果此类调用影响应用程序的关键路径,则必须通过分析性能来做出决定。
我曾经这样做过,以调用类内部和外部的私有函数。由于我的公共函数在调用此函数之前必须锁定互斥锁,而我的私有函数不是,因此它很有用。是这样的;
public:
void set_configuration()
{
std::lock_guard<std::mutex> lg(m);
reconfigure_output();
}
private:
void reconfigure_output()
{
...
}
void some_other_function()
{
...
reconfigure_output();
}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 什么时候调用析构函数
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 是什么让放置新调用对象的构造函数?
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 函数名称表示什么等等
- 在函数中拥有函数原型的目的是什么?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- C++:使用方法调用析构函数的顺序是什么?
- 将此布尔值传递给此函数的最有效方法是什么?
- lambda函数什么时候对C++中的类有用
- 函数什么时候必须在c++中返回引用
- 如果void类型函数什么都不返回会发生什么