首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在全局函数或由全局函数包装的类中实现

在全局函数或由全局函数包装的类中实现
EN

Stack Overflow用户
提问于 2009-01-28 11:03:05
回答 4查看 594关注 0票数 3

根据预定义的签名,我必须实现一组60个函数。它们必须是全局函数,而不是某个类的成员函数。当我实现它们时,我使用了第三方提供的一组做得很好的类。

我的大多数函数实现都很短,大约5-10行,主要处理对第三方类的不同访问。对于一些更复杂的函数,我创建了几个新类来处理所有复杂的东西,我也在函数中使用它们。所有的状态信息都存储在我的和第三方的类的静态成员中,所以我不需要创建全局变量。

问:如果我实现一个有60个成员函数的大类,然后在那里实现所有的实现(现在在全局函数中),会不会更好?我要写的每个函数都会调用类中相应的成员函数。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-28 11:54:48

所有的状态信息都存储在我的和第三方的类的静态成员中,所以我不需要创建全局变量。

这就是关键点。不,他们绝对不应该被放到课堂上。类是用来创建对象的。在您的情况下,您可以将它们用作数据和函数的作用域。但是命名空间已经很好地解决了这个问题:

代码语言:javascript
复制
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 ...
    }
}

创建纯粹由静态成员组成的类不是一个好主意。

票数 4
EN

Stack Overflow用户

发布于 2009-01-28 11:23:05

你的代码用户真的需要这么大的类吗?

如果是,就实现它。

如果不是,就不要浪费时间去实现它,也不要浪费别人的时间去测试它,也不要浪费时间去了解这个类在OOP外观之外的确切作用是什么。

票数 2
EN

Stack Overflow用户

发布于 2009-01-28 14:38:27

litb可能是正确的。您甚至会考虑在一堆免费函数周围包装一个class的唯一原因是,如果您需要附加一些自己的数据以在包装器中使用。我唯一想到的就是是否需要一个日志文件的句柄,或者包装器中类似的东西。

在相关的注释中,抵制using namespace stuff;的诱惑!始终引用使用名称空间限定的函数:

代码语言:javascript
复制
#include <stuff.h>
void some_function() {
    stuff::function_wrapper();
}

而不是:

代码语言:javascript
复制
#include <stuff.h>
using namespace stuff;
void some_function() {
    function_wrapper();
}

这样做的好处是,如果需要将namespace转换为包含static方法的类,可以很容易地完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/487243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档