到目前为止,如果我需要一些常用的实用函数,我会将它们移到一个实用类中。以这样的方式:
#pragma once
class QDate;
class QDateEdit;
class QDialog;
class QWidget;
class GuiUtils final
{
public:
static void moveDialog( QDialog* aDialog, const int aMargin = 4 );
static void setMainWidget( QWidget* aParent, QWidget* aChild, const int aMargin = 0 );
static void setValueBlocked( QDateEdit* aDateEdit, const QDate& aDate );
private:
GuiUtils();
};
class DateUtils final
{
public:
static QDate today();
static QDate yesterday();
static QDate firstDayOfWeek();
static QDate firstDayOfMonth();
static QDate firstDayOfQuarter();
static QDate firstDayOfYear();
static int quarter( const QDate& aDate );
static int quarter( const int aMonth );
private:
DateUtils();
};
但我知道还有其他选择。我可以将我所有的函数移动到命名空间中。以这样的方式:
#pragma once
class QDate;
class QDateEdit;
class QDialog;
class QWidget;
namespace gui_utils
{
void moveDialog( QDialog* aDialog, const int aMargin = 4 );
void setMainWidget( QWidget* aParent, QWidget* aChild, const int aMargin = 0 );
void setValueBlocked( QDateEdit* aDateEdit, const QDate& aDate );
};
namespace date_utils
{
QDate today();
QDate yesterday();
QDate firstDayOfWeek();
QDate firstDayOfMonth();
QDate firstDayOfQuarter();
QDate firstDayOfYear();
int quarter( const QDate& aDate );
int quarter( const int aMonth );
};
对我来说,创建实用程序类似乎是比命名空间更好的解决方案。我看到我需要输入更多内容,但如果我需要为所有实用程序功能组定义一个新的命名空间,这对我来说看起来有点极端。我通常不会创建新的命名空间,而是每次都创建类,所以这就是我使用第一个选项的原因。
但现在我想知道:
- 为此目的使用命名空间有什么好处吗?
- 为此目的使用 namespace 是否有更好的性能?
- 它是否更符合
C++
的概念? - 为此使用命名空间还有其他原因吗?
我想知道您的意见,但我也需要解释。我不想重写我现有的代码并“仅仅因为”以不同的风格编写新代码。我需要一些基于语言/性能或任何其他类型的解释,说明为什么要以一种或另一种方式使用它。
感谢您的帮助。
最佳答案
我相信在您的情况下,出于各种原因,使用命名空间是更好的选择。
例如:
- 您的函数似乎不共享数据。
- 命名空间支持 ADL(参数相关名称查找)。
请参阅多种风格指南中的任何一种。这是来自 Google's 的剪辑:
*非成员、静态成员和全局函数 更喜欢将非成员函数放在命名空间中;... 不要只创建类来对不共享静态数据的静态成员函数进行分组,而是使用 namespace 。 *
关于c++ - 命名空间或类中的实用程序函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30694183/