直到现在,如果我需要一些常用的实用程序函数,我将它们移动到实用程序类中。用这样的方式:
#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 );
};
对我来说,它似乎是创建实用程序类而不是命名空间的更好解决方案。我看到我需要输入更多,但如果我需要为所有实用程序功能组定义一个新的命名空间,对我来说这看起来有点极端。我通常不会创建新的命名空间,而是每次创建类,这就是我使用第一个选项的原因。
但现在我想知道:
C++
?我想知道你的意见,但我也需要解释。我不想重写我现有的代码并用“仅仅因为”的不同风格编写新的代码。我需要一些基于语言/表现或任何其他类型的解释,为什么要以一种或另一种方式使用它。
感谢您的帮助。
答案 0 :(得分:1)
我相信在您的情况下,出于各种原因,使用命名空间是更好的选择。
例如:
请参阅几种风格指南中的任何一种。这是来自Google's的剪辑:
*非成员,静态成员和全局职能 首选将非成员函数放在命名空间中; ... 不是仅创建类来对不共享静态数据的静态成员函数进行分组,而是使用命名空间。 * 强>