所以,我有一堂课.这是一个有用的课程.我非常喜欢.我们称之为MyUsefulClass.
MyUsefulClass有一个公共方法.我们称之为processUsefulData(std::vector<int>&).
现在假设processUsefulData真的做了两件事,我想从中重构它:
std::vector<int> MyUsefulClass::processUsefulData(std::vector<int>& data)
{
for (/*...*/)
{
for (/*...*/)
{
// a bunch of statements...
}
}
for (/*...*/)
{
for (/*...*/)
{
// a bunch of other statements...
}
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想分割这些职责并重写代码
std::vector<int> MyUsefulClass::processUsefulData(std::vector<int>& data)
{
doProcessA(data, dataMember_);
doProcessB(data, otherDataMember_);
return data;
}
Run Code Online (Sandbox Code Playgroud)
所以,我不知道我是否应该让两个辅助函数自由函数或成员函数,并且每个函数都适合.我也不知道是否最好在匿名命名空间中创建它们.有谁知道这样做的好时机?
T.E*_*.D. 12
如果可能的话,我通常会在自治命名空间中创建辅助例程"自由"例程.这样我就不会让客户端不需要担心的接口复杂化(在*.h文件中关闭).
但是,您必须小心,不要通过这样做引入非重入.例如,通过修改全局数据对象或静态本地而不是类成员.如果你需要这样做,你最好把它变成一个合适的班级成员.
自由功能/成员功能
我会让它们自由的功能是可能的(它们不需要访问类的内部).如果它们处理一组属性或需要访问其他成员,那么将其作为成员函数.
访问
如果代码只在此范围内有意义,并且不会从其他代码中使用,则将它们设为私有:如果是成员则为private;如果是自由函数,则在未命名的命名空间中实现.
如果其他代码将从使用代码中受益,则将其发布到界面中.这意味着如果它是成员或通过命名空间(或全局命名空间)中的标头可访问自由函数,则使其受到保护.
| 归档时间: |
|
| 查看次数: |
9469 次 |
| 最近记录: |