根据预定义的签名,我必须实现一组60个函数。它们必须是全局函数,而不是某个类的成员函数。当我实现它们时,我使用了第三方提供的一组做得很好的类。
我的大多数函数实现都很短,大约5-10行,主要处理对第三方类的不同访问。对于一些更复杂的函数,我创建了几个新类来处理所有复杂的东西,我也在函数中使用它们。所有的状态信息都存储在我的和第三方的类的静态成员中,所以我不需要创建全局变量。
问:如果我实现一个有60个成员函数的大类,然后在那里实现所有的实现(现在在全局函数中),会不会更好?我要写的每个函数都会调用类中相应的成员函数。
发布于 2009-01-28 11:54:48
所有的状态信息都存储在我的和第三方的类的静态成员中,所以我不需要创建全局变量。
这就是关键点。不,他们绝对不应该被放到课堂上。类是用来创建对象的。在您的情况下,您可以将它们用作数据和函数的作用域。但是命名空间已经很好地解决了这个问题:
namespace stuff {
... 60 functions ...
namespace baz {
... if you want, you can have nested namespaces, to ...
... categorize the functions ...
}
namespace data {
... you can put data into an extra namespace if you want ...
}
}创建纯粹由静态成员组成的类不是一个好主意。
发布于 2009-01-28 11:23:05
你的代码用户真的需要这么大的类吗?
如果是,就实现它。
如果不是,就不要浪费时间去实现它,也不要浪费别人的时间去测试它,也不要浪费时间去了解这个类在OOP外观之外的确切作用是什么。
发布于 2009-01-28 14:38:27
litb可能是正确的。您甚至会考虑在一堆免费函数周围包装一个class的唯一原因是,如果您需要附加一些自己的数据以在包装器中使用。我唯一想到的就是是否需要一个日志文件的句柄,或者包装器中类似的东西。
在相关的注释中,抵制using namespace stuff;的诱惑!始终引用使用名称空间限定的函数:
#include <stuff.h>
void some_function() {
stuff::function_wrapper();
}而不是:
#include <stuff.h>
using namespace stuff;
void some_function() {
function_wrapper();
}这样做的好处是,如果需要将namespace转换为包含static方法的类,可以很容易地完成。
https://stackoverflow.com/questions/487243
复制相似问题