我最近阅读了Mike McShaffry的Game Coding Complete,并注意到我在其他地方还没有看到的代码样式。我注意到的更重要的事情是基类的名称,这些基类的定义以I开头的接口(如IActor
),受保护成员变量的名称以m_开头的(如m_Type
)和虚方法的名称(如VSetId()
)。为了显示一个更大,更易读的示例:
class BaseActor : public IActor
{
friend class BaseGameLogic;
protected: ActorId m_id;
Mat4×4 m_Mat;
int m_Type;
shared_ptr <ActorParams> m_Params;
virtual void VSetID(ActorId id) { m_id = id; }
virtual void VSetMat(const Mat4×4 &newMat) { m_Mat = newMat; }
public:
BaseActor(Mat4×4 mat, int type, shared_ptr<ActorParams> params)
{ m_Mat=mat; m_Type=type; m_Params=params; }
/* more code here */
};
我非常喜欢这种风格:看起来合理,而且看起来有助于提高代码的整体可读性。问题是:这是一个或多或少的既定标准吗?除了我提到的内容以外,还有其他内容吗?
最佳答案
这就是匈牙利符号。它是将有关变量的信息编码到变量名中。
例如,m_params
表示“称为params的成员变量”。 IActor
表示“打算用作ifface的称为Actor的类”。这是一个非常热门的话题。大多数人都同意匈牙利书写法是一个错误的选择,但是许多人会捍卫自己所做的事情,而不是匈牙利人。