我正在利用Windows AP在C++中自行实施XUL。 这些要素是由XML教区建造的,这就要求这些教区具有相同的接口,因此我们无需为每个单元的建筑商撰写习惯法。 其结果是,我的大多数成员认为:
class Button : public Element
{
public:
static const char * Type() { return "button"; }
private:
friend class Element;
Button(Element * inParent, const AttributesMapping & inAttributesMapping);
};
class Label : public Element
{
public:
static const char * Type() { return "label"; }
private:
friend class Element;
Label(Element * inParent, const AttributesMapping & inAttributesMapping);
};
class Description : public Element
{
public:
static const char * Type() { return "description"; }
virtual bool init();
private:
friend class Element;
Description(Element * inParent, const AttributesMapping & inAttributesMapping);
};
因此,这里有许多法典上的重复。 我想知道,用宏观呼吁来取代这些呼吁是否是一个好的想法:
#define DECLARE_ELEMENT(ElementType, XULName)
class ElementType : public Element
{
public:
static const char * Type() { return XULName; }
private:
friend class Element;
ElementType(
Element * inParent,
const AttributesMapping & inAttributesMapping);
};
DECLARE_ELEMENT(Window, "window")
DECLARE_ELEMENT(Button, "button")
DECLARE_ELEMENT(Label, "label")
我没有完全阐述这一概念,因此,这里缺少一些东西,如类别定义,以及(可能)每个要素增加方法的能力。
但是,我很想知道你对在这种情况下使用宏观方法的看法。 自由地表达你们的想法。
http://www.ohchr.org。
现在,我使用的是小幅手法,从一套模板中生成来源和主人档案。 我加强了文字,以便档案也自动在SVN上添加标记,并修改了视频演播室项目档案,以包括档案。 这为我节省了大量手工劳动。 我对这一解决办法感到非常高兴。 此时此刻,正是模板所看的:
#ifndef {{ELEMENT_NAME_UPPER}}_H_INCLUDED
#define {{ELEMENT_NAME_UPPER}}_H_INCLUDED
#include "XULWin/Element.h"
namespace XULWin
{
class {{ELEMENT_NAME}} : public Element
{
public:
static ElementPtr Create(Element * inParent, const AttributesMapping & inAttr)
{ return Element::Create<{{ELEMENT_NAME}}>(inParent, inAttr); }
static const char * Type() { return "{{ELEMENT_TYPE}}"; }
virtual bool init();
private:
friend class Element;
{{ELEMENT_NAME}}(Element * inParent, const AttributesMapping & inAttributesMapping);
};
} // namespace XULWin
#endif // {{ELEMENT_NAME_UPPER}}_H_INCLUDED
CPP文件:
#include "XULWin/{{ELEMENT_NAME}}.h"
#include "XULWin/{{ELEMENT_NAME}}Impl.h"
#include "XULWin/AttributeController.h"
#include "XULWin/Decorator.h"
namespace XULWin
{
{{ELEMENT_NAME}}::{{ELEMENT_NAME}}(Element * inParent, const AttributesMapping & inAttributesMapping) :
Element({{ELEMENT_NAME}}::Type(),
inParent,
new {{ELEMENT_NAME}}Impl(inParent->impl(), inAttributesMapping))
{
}
bool {{ELEMENT_NAME}}::init()
{
return Element::init();
}
} // namespace XULWin