在 2017 cppcon 视频中,我看到了 Klaus Iglberger 的演讲,题目是“释放你的函数! ”。在本次演讲中,演讲者谈到了切换到自由函数如何简化私有方法的测试过程(见 19:00)。这个想法是你将私有方法从类中拉出来(你使它成为一个自由函数)并且它变得可测试。
起初,我觉得这个想法很有趣,但后来我想得越多,我就越不明白这实际上应该如何工作。例如,假设我有以下(虚拟)类:
class SomeClass
{
public:
SomeClass();
~SomeClass();
void someTask();
private:
void someComplexTask();
void someOtherComplexTask();
};
void SomeClass::someTask()
{
someComplexTask();
someOtherComplexTask();
}
// private tasks implementations...
然后someComplexTask()
和someOtherComplexTask()
是私有方法。这意味着它们是实现细节,即它们只能在内部SomeClass
(或朋友)调用。在我看来,如果你让它们成为自由函数,是的,它们变得可测试,但它们不再是私有的,也不是特定于SomeClass
. 事实上,它们可以从代码中的任何地方调用......
所以我的问题是:为什么伊格尔伯格先生的观点是有效的?