我最近阅读了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的类”。这是一个非常热门的话题。大多数人都同意匈牙利书写法是一个错误的选择,但是许多人会捍卫自己所做的事情,而不是匈牙利人。

08-19 01:39